2014-11-08 93 views
0

JavaCV中的閾值圖像使用javaCV中的相機對圖像進行閾值處理

我按照幾個步驟閾值使用相機拍攝的圖像。但是一半的圖像變成黑色。我嘗試了幾種類型的閾值算法,而不是它們的工作。 我用於閾值化的代碼在下面給出,

cvCvtColor(src, colorDst, CV_GRAY2BGR); 
cvThreshold(colorDst, threshold, 155, 255, CV_THRESH_BINARY); 
//cvThreshold(colorDst, threshold, 155, 255, CV_THRESH_OTSU); // code didnt work in javaCV 

是否有這將閾值適當地其使用攝像機拍攝的整個圖像的任何算法?

原始圖像

http://imgur.com/iGfWjFa

閾值的圖像

http://imgur.com/RIZdIfz

回答

0

閾值= 155太高爲這個圖象 - 右側是暗,因此變成黑色。
最佳值約爲120(例如,您可以使用GIMP Color Picker找到它)。

如果您希望自動計算閾值,請使用THRESH_OTSU或THRESH_TRIANGLE。不要使用BGR圖像,此功能僅適用於灰度圖像。

如果閾值這個圖像作爲使用三角算法將得到的閾值的灰度一個= 117和圖像將被適當地進行閾值(代碼的OpenCV-3.0b中):

Mat src = Imgcodecs.imread("res/test.jpg", Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE); 
Mat dst = new Mat(); 
double threshold = Imgproc.threshold(src, dst, 0, 255, Imgproc.THRESH_TRIANGLE); 
Imgcodecs.imwrite("res/out.jpg", dst); 
System.out.println(threshold); // 117 

src.jpg out.jpg