2012-07-11 56 views
5

此代码行意味着什么,以及如何将此代码转换为javacv?opencv中以下代码行的含义是什么?

gray = Scalar::all(255); 

这是与此代码行有关的整个代码。

Mat src = imread("in.jpg"), gray; 

cvtColor(src, gray, CV_BGR2GRAY); 
threshold(gray, gray, 230, 255, THRESH_BINARY_INV); 
vector<Vec4i> hierarchy; 
vector<vector<Point> > contours; 
findContours(gray, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE); 

gray = Scalar::all(255); 

请问可以解释一下吗?

+0

什么是这个代码吗? – 2012-07-11 05:55:18

+0

用于查找图像中的轮廓,并且在此之后还有一些代码 – NadLnk 2012-07-11 06:00:05

+2

我认为该线条会使灰色完成白色。如果你可以运行cpp代码,运行它并在最后显示灰色。 – 2012-07-11 06:01:11

回答

2

突出显示的代码行将灰色设置为255.它是OpenCV中将矩阵设置为值时可用的方法之一。

其他的方式来做到这一点是:

gray.setTo(255); // prior to 2.3.1 it was a buggy on multichannel images 
gray = 255; // prior to 2.3.1 it was a buggy on multichannel images 

gray.setTo(Scalar::all(255)); // it works regardless the OpenCV version. 

但我认为问题是,为什么findfContours在此之后源线...

根据该文档,findContours修改它正在对图像(它提取一个轮廓,然后进入下一个轮廓,直到没有轮廓)。结果是垃圾图像(可能是黑色)。

因此,set-to-255行将其清除以供其他用途。

Mat::setTo()方法也应该可以在JavaCV,所以你不应该有问题,将其转换成Java

+0

是0还是255? – 2012-07-11 06:04:38

+0

请你能给这个简单的代码示例吗? – NadLnk 2012-07-11 06:04:42