以下代码行在opencv中的含义是什么?

时间:2012-07-11 05:54:05

标签: java opencv javacv

此代码行的含义是什么?如何将此代码转换为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);

有人可以解释一下吗?

2 个答案:

答案 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 theremWhilte = Scalar.all(255);

同时检查JavaCV样本:http://code.google.com/p/javacv/wiki/OpenCV2_Cookbook_Examples_Chapter_2