此代码行的含义是什么?如何将此代码转换为javacv?
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 :(得分: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行将其清除以供其他用途。
JavaCV中也应该提供Mat::setTo()
方法,因此您不应该在将其转换为Java时遇到问题
答案 1 :(得分:2)
正如我在评论中提到的,它用于将灰色图像设置为白色。
它的好处是什么?只有当我们知道这段代码是什么或者看到完整的代码时,我们才可以说。
关于Java,OpenCV现在有一些android示例,您可以在其中找到Java代码。
您可以查看它们。 I saw a similar function there:mWhilte = Scalar.all(255);
同时检查JavaCV样本:http://code.google.com/p/javacv/wiki/OpenCV2_Cookbook_Examples_Chapter_2