2017-09-08 351 views
1

我是openCV的新手。我已經能夠用掩膜計算圖像的綠色和黃色像素。我想知道openCV中布朗的HSV範圍是什麼。openCV中BROWN顏色的HSV值的範圍是多少?

private void testBrownPixelCount(Mat originalMat) { 
    if(isMatEmpty(originalMat)){ 
     Log.i(TAG, "Empty Original Mat at testBrownPixCoutn()"); 
    }else{ 
     //Perform: 
     Mat maskMat = Imgcodecs.imread(testFilePath); 
     Mat bgr = new Mat(); 
     Imgproc.cvtColor(maskMat, bgr, Imgproc.COLOR_BGR2RGB); 
     Mat maskMatHsv = new Mat(); 
     Imgproc.cvtColor(bgr, maskMatHsv , Imgproc.COLOR_RGB2HSV); 

     //iF NOt; use RGB2HSV: 
     Mat brownMat = new Mat(); 
     Scalar min_brown = new Scalar(20,100,100); 
     Scalar max_brown = new Scalar(30,255,255); 
     Core.inRange(maskMatHsv, min_brown, max_brown, brownMat); 
     Log.i(TAG, "Brown Mat Non-zeros:" + Core.countNonZero(brownMat)); 

     Bitmap bitmapMat = Bitmap.createBitmap(brownMat.cols(), brownMat.rows(), Bitmap.Config.ARGB_8888); 
     Utils.matToBitmap(brownMat, bitmapMat); 
     imgView_testView.setImageBitmap(bitmapMat); 

    } 

這導致黑色imageView,它甚至無法檢測到黃色的。

+3

請點擊這裏:http://colorizer.org/和這裏:http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html#cvtcolor –

回答

3

你可以查看我的回答here,它深入瞭解如何繪製/查看一系列不同的HSV值。

您還可以查看外部網站,這些網站可以使用值來玩弄色彩空間。在HSV中,棕色對應於較高的飽和度水平(較低的值變得更加灰色)和中間值水平(低一些的是黑色的,較高的是白色的),並且色調在(對於紅色磚顏色在20度之間)到40度之間沙色。但在OpenCV中,色調度數除以2以使它們適合255以下,對於色相值更像10-20。

在鏈接的答案使用代碼,我產生這個gif一系列棕色值從[10, 100, 20][20, 255, 200]在HSV:

Brown values

這似乎涵蓋棕色大多數的想法,但你可以如果你想要一些較暗,較輕,灰色等等的東西出現,玩這些值。

尋找好閾值的另一種方法是創建一個程序,讓您試用它。例如,在Python和OpenCV中使用I built a tool類似於Photoshop中的魔術棒選擇器,它允許您定義閾值,單擊一個像素,並選擇與點擊位置相關的相似顏色的像素。該工具將打印出最高和最低的顏色值,並打印出平均顏色和標準偏差,以更好地控制與所選顏色類似的閾值。你可以看到它使用的gifhere

另一種解決方法是創建帶OpenCV的軌跡條,給出所有最小和最大閾值,並在每次更改值時都使用閾值圖像進行屏幕更新。我爲built a tool在Python和OpenCV中也是如此。你可以看到它正在使用的一點gifhere

如果您仔細閱讀這兩個項目的代碼,您可以瞭解如何構建類似的程序以利用值來玩弄不同的顏色空間以更舒適地工作。

+1

我已閱讀了關於你的鏈接深入瞭解HSV值,我學到了很多東西。事實上,我認爲,通過這個解釋,我可以自己測試HSV值。我非常感謝,請繼續分享知識並幫助他人。 – Jepoy

0

另外,從Wiki:彩色座標

「HSV(H,S,V)(30°,100%,59%)」,

所以 「理想的」 打開CV ħ由於Hue for OpenCV 8-bit images is Hue/2,因此30/2 = 15,BROWN的ue值爲15S飽和度意味着255(因爲255是Open CV中的Scalar頻道的最大值),並且對於Scalar頻道,平均值爲(59/100)* 255 = 150的59%。因此,「理想」布朗Scalar()是:

Scalar ideal_brown = new Scalar(15,255,150); 

爲了一些「接近BROWN」添加彩色像素,您可以:

1)減去色調某一值時,「更紅」顏色的像素;

2)爲「更多綠色」彩色像素添加一些Hue值;

3)從「飽和度」中減去「較少着色」像素的某個值(因爲255已經是最大值,所以不能添加);

4)從「值更深」像素減去一些值;

5)爲「更輕」像素值增加一些值。

所以,

Scalar min_brown = new Scalar(15-<delta1_for_hue>,255-<delta1_for_saturation>,150-<delta1_for_value>); 
Scalar max_brown = new Scalar(15+<delta2_for_hue>,255,<delta2_for_saturation>,150+<delta2_for_value>); 

而且,看看this答案Miki