最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

opencv之顏色過濾只留下圖片中的紅色區(qū)域操作

 更新時(shí)間:2020年06月05日 08:49:08   作者:jianjian1992  
這篇文章主要介紹了opencv之顏色過濾只留下圖片中的紅色區(qū)域操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

如圖,這次需要在圖片中找到卷尺的紅色刻度,所以需要對(duì)圖像做過濾,只留下紅色部分。

一開始的想法是分別找到RGB值,然后找到紅色區(qū)域的部分保留就可以了,不過好像很難確定紅色區(qū)域的RGB取值范圍,所以要把圖片轉(zhuǎn)化到HSV空間中去。

在opencv中直接使用cvCvtColor函數(shù)就可以啦。

IplImage* hsv = cvCreateImage( cvGetSize(image), 8, 3 );

cvCvtColor(image,hsv,CV_BGR2HSV);

opencv 的H范圍是0~180,紅色的H范圍大概是(0~8)∪(160,180) ,S是飽和度,一般是大于一個(gè)值,S過低就是灰色(參考值S>80),V是亮度,過低就是黑色,過高就是白色(參考值220>V>50)。

所以接下來要做的就是遍歷圖像,獲取圖像每個(gè)像素點(diǎn)的H,S,V分量,然后做判斷,滿足條件的就保留,不滿足的就賦值為黑色。

我是用opencv中的IplImage來存儲(chǔ)圖片的。

IplImage獲取像素點(diǎn)的方式如下:

CvScalar s_hsv = cvGet2D(hsv, j, i);//獲取像素點(diǎn)為(i, j)點(diǎn)的HSV的值,i是width值,j是height值

IplImage對(duì)像素點(diǎn)賦值的方式如下:

CvScalar s;

cvSet2D(hsv, j ,i, s);//對(duì)(i,j)處的像素點(diǎn)賦值

分別取得H,S,V分量,注意圖像轉(zhuǎn)化的時(shí)候BGR2HSV,所以s.val[0]是B或H的值,s.val[1]是G或S的值,s.val[2]則是R或V的值。

因?yàn)閹煹芟矚g用CvMat,所以輸入都改成了CvMat,使用的時(shí)候inputImage是希望過濾的圖片,outputImage則為輸出圖片,因?yàn)閛utputImage會(huì)在函數(shù)中進(jìn)行空間申請(qǐng)與賦值,所以傳入?yún)?shù)的時(shí)候直接把它設(shè)成NULL就可以了。

另外要注意一點(diǎn),因?yàn)槭菍?duì)彩色圖像做實(shí)驗(yàn),所以如果傳入的圖片不是3通道的彩色圖片,那么就會(huì)出內(nèi)存錯(cuò)誤。

以下打開圖片或創(chuàng)建圖片的方式都是單通道方式,會(huì)出現(xiàn)內(nèi)存錯(cuò)誤。

IplImage *input = cvLoadImage(path, 0),
CvMat* M = cvCreateMat(4,4,CV_32FC1); //或是8UC1, 因?yàn)镃1表示nChannel = 1,也就是單通道

void colorFilter(CvMat *inputImage, CvMat *&outputImage)
{
 int i, j;
 IplImage* image = cvCreateImage(cvGetSize(inputImage), 8, 3);
 cvGetImage(inputImage, image); 
 IplImage* hsv = cvCreateImage( cvGetSize(image), 8, 3 ); 
 
 cvCvtColor(image,hsv,CV_BGR2HSV);
 int width = hsv->width;
 int height = hsv->height;
 for (i = 0; i < height; i++)
 for (j = 0; j < width; j++)
 {
 CvScalar s_hsv = cvGet2D(hsv, i, j);//獲取像素點(diǎn)為(j, i)點(diǎn)的HSV的值 
 /*
 opencv 的H范圍是0~180,紅色的H范圍大概是(0~8)∪(160,180) 
 S是飽和度,一般是大于一個(gè)值,S過低就是灰色(參考值S>80),
 V是亮度,過低就是黑色,過高就是白色(參考值220>V>50)。
 */
 CvScalar s;
 if (!(((s_hsv.val[0]>0)&&(s_hsv.val[0]<8)) || (s_hsv.val[0]>120)&&(s_hsv.val[0]<180)))
 {
 s.val[0] =0;
 s.val[1]=0;
 s.val[2]=0;
 cvSet2D(hsv, i ,j, s);
 }
 
 }
 outputImage = cvCreateMat( hsv->height, hsv->width, CV_8UC3 );
 cvConvert(hsv, outputImage);
 cvNamedWindow("filter");
 cvShowImage("filter", hsv);
 waitKey(0);
 cvReleaseImage(&hsv);
}

關(guān)于函數(shù)還有一點(diǎn)要說明,H分量我取得是(0,8),(120,180),S與V分量沒有做篩選,如果按照注釋部分的進(jìn)行篩選結(jié)果不是很好。

結(jié)果如圖:

補(bǔ)充知識(shí):opencv實(shí)現(xiàn)圖像去除單一顏色背景

思路

因?yàn)楸尘笆枪潭伾苋菀缀Y選出背景,然后將其設(shè)為白色完全透明即可。

代碼

#coding=utf-8
import cv2 as cv
bg_color = [197, 102, 6]
threshold = 3000

def calc_diff(pixel):
'''
計(jì)算pixel與背景的離差平方和,作為當(dāng)前像素點(diǎn)與背景相似程度的度量
'''
  return (pixel[0]-bg_color[0])**2 + (pixel[1]-bg_color[1])**2 + (pixel[2]-bg_color[2])**2

def remove_bg():
  image_path = './logo.png'
  logo = cv.imread(image_path)
  logo = cv.cvtColor(logo, cv.COLOR_BGR2BGRA) #將圖像轉(zhuǎn)成帶透明通道的BGRA格式
  h, w = logo.shape[0:2]
  for i in range(h):
    for j in range(w):
      if calc_diff(logo[i][j]) < threshold:
      #若果logo[i][j]為背景,將其顏色設(shè)為白色,且完全透明
        logo[i][j][0] = 255
        logo[i][j][1] = 255
        logo[i][j][2] = 255
        logo[i][j][3] = 0
 
  cv.imwrite("./logo_rmbg.png", logo)
        
if __name__ == '__main__':
  remove_bg()

使用方法

修改第5行的bg_color為圖片背景的bgr值,以及第6行的threshold(threshold越大,覆蓋的像素越多)。

效果:

emmm,事實(shí)證明背景附近的顏色不是嚴(yán)格的背景色,后來將字填充后好多了。

以上這篇opencv之顏色過濾只留下圖片中的紅色區(qū)域操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在服務(wù)器端實(shí)現(xiàn)無間斷部署Python應(yīng)用的教程

    在服務(wù)器端實(shí)現(xiàn)無間斷部署Python應(yīng)用的教程

    這篇文章主要介紹了在服務(wù)器端實(shí)現(xiàn)無間斷部署Python應(yīng)用的教程,方法主要是Gunicorn進(jìn)行重載,需要的朋友可以參考下
    2015-04-04
  • python的range和linspace使用詳解

    python的range和linspace使用詳解

    今天小編就為大家分享一篇python的range和linspace使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • SVM基本概念及Python實(shí)現(xiàn)代碼

    SVM基本概念及Python實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了SVM基本概念及Python實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 詳解python的運(yùn)算符與表達(dá)式

    詳解python的運(yùn)算符與表達(dá)式

    這篇文章主要為大家介紹了python的運(yùn)算符與表達(dá)式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python中函數(shù)的基本定義與調(diào)用及內(nèi)置函數(shù)詳解

    Python中函數(shù)的基本定義與調(diào)用及內(nèi)置函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于Python中函數(shù)的基本定義與調(diào)用及內(nèi)置函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python全棧開發(fā)語(yǔ)法總結(jié)

    python全棧開發(fā)語(yǔ)法總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python全棧開發(fā)語(yǔ)法的相關(guān)總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2020-11-11
  • 詳解Python函數(shù)式編程之裝飾器

    詳解Python函數(shù)式編程之裝飾器

    這篇文章主要為大家詳細(xì)介紹了Python函數(shù)式編程之裝飾器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Django給admin添加Action的步驟詳解

    Django給admin添加Action的步驟詳解

    這篇文章主要給大家介紹了關(guān)于Django給admin添加Action的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python logging模塊的使用總結(jié)

    python logging模塊的使用總結(jié)

    這篇文章主要介紹了python logging模塊使用總結(jié)以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。,需要的朋友可以參考下
    2019-07-07
  • 利用Python實(shí)現(xiàn)普通視頻變成動(dòng)漫視頻

    利用Python實(shí)現(xiàn)普通視頻變成動(dòng)漫視頻

    這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)普通視頻變成動(dòng)漫視頻效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-08-08

最新評(píng)論

唐河县| 靖州| 自贡市| 北宁市| 措勤县| 南汇区| 新昌县| 临漳县| 方山县| 肥城市| 荃湾区| 万州区| 府谷县| 普定县| 宜川县| 蒲江县| 衡阳县| 东明县| 雷山县| 张家界市| 平泉县| 金阳县| 西贡区| 宕昌县| 平塘县| 河津市| 庄浪县| 高安市| 长顺县| 阿坝| 邓州市| 始兴县| 宜良县| 宝鸡市| 惠来县| 汤阴县| 涟水县| 依兰县| 祁东县| 南阳市| 合山市|