OpenCV: 对图像进行阈值处理和反转

3

我正在尝试使用Cinder OpenCV块对图像进行阈值化和反转。在openFrameworks中,我会使用类似以下的代码:

someImage.threshold(230, true);

...其中true是指定阈值和反转的参数。

在Cinder中,我正在尝试以下操作:

cv::threshold (input, threshNear, 230, 255, CV_THRESH_BINARY_INV);     

...不起作用的代码或

cv::threshold (input, threshNear, 100, 255, CV_8U);
cv::invert ( threshNear,  threshNearInverted);

有什么建议吗?

在产生错误并使程序卡住的情况下,你可以尝试以下几点:


2
cv::invert是矩阵求逆运算,而非您可能想要的颜色反转操作。 - berak
同时,请提供任何情况下的确切错误。 - berak
@berak,感谢您对cv::invert的评论以及投票反对:) 我实际上发现CV_THRESH_BINARY_INV参数是正确的选择,但由于我使用的值有误,结果是误导性的(请参见我的答案)。我将进一步调查这个值的问题,不幸的是,cinder文档的缺乏有时让我感到有些不知所措... - Sr.Richie
1个回答

7

好的,经过更多测试,我意识到实际上正确的方法是

 cv::threshold (input, threshNear, 70, 255, CV_THRESH_BINARY_INV);

我在问题中发布的代码似乎与我尝试使用的阈值值有关(255上的230)。如果我使用较低的值(例如255上的70),颜色反转实际上会起作用。


由于您基本上正在使用OpenCV:http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#threshold - berak
4
哦,binary_not 可能是你所谓的“invert”应该做的事情。 - berak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接