OpenCV函数类似于matlab';s";查找“;

OpenCV函数类似于matlab';s";查找“;,matlab,opencv,Matlab,Opencv,我在openCV中寻找一个函数来帮助我制作图像的遮罩 例如,在MATLAB中: B(A某些函数允许您向它们传递mask参数。要按照您描述的方式创建掩码,我认为您在后面是比较运算符,允许您通过与另一个数组或标量进行比较来创建掩码。例如: im = cv.LoadImageM('tree.jpg', cv.CV_LOAD_IMAGE_GRAYSCALE) mask_im = cv.CreateImage((im.width, im.height), cv.IPL_DEPTH_8U, 1) #Here

我在openCV中寻找一个函数来帮助我制作图像的遮罩

例如,在MATLAB中:


B(A某些函数允许您向它们传递
mask
参数。要按照您描述的方式创建掩码,我认为您在后面是比较运算符,允许您通过与另一个数组或标量进行比较来创建掩码。例如:

im = cv.LoadImageM('tree.jpg', cv.CV_LOAD_IMAGE_GRAYSCALE)
mask_im = cv.CreateImage((im.width, im.height), cv.IPL_DEPTH_8U, 1)
#Here we create a mask by using `greater than 100` as our comparison
cv.CmpS(im, 100, mask_im, cv.CV_CMP_GT)
#We set all values in im to 255, apart from those masked, cv.Set can take a mask arg.
cv.Set(im, 255, mask=mask_im)
cv.ShowImage("masked", im)
cv.WaitKey(0)
原始
im

im
处理后:


opencv C++支持以下语法:创建掩码时,您可能会觉得方便:

Mat B= A > 1;//B(A<1)=0
这应等同于:

B=zeros(size(A));
B(A==10)=c;

您也可以使用
compare()
。请参阅以下OpenCV。

谢谢!这正是我要找的:)您知道为什么(矩阵==1)的结果会导致源矩阵中的值为1,而输出矩阵中的值为255吗?OpenCV有一个称为掩蔽的概念。约定是使用0->0和1->255的字符实现二进制掩码。因此,最好的答案是,除了惯例之外,255没有任何特殊原因被重新调整。请注意,在OPenCV函数中使用掩码时,不必遵守此约定。1-255之间的任何数字为真,0为假。谢谢!是的,我知道255的计算结果为真,但在MATLAB中,将二进制矩阵输出中的1相加是很常见的。我感到困惑的是,我得到了巨大的数字,因为所有的数字都是255。我会记住的。再次感谢。我同意这可能不方便。您可以通过这种方式将其屏蔽
A=&0x1
,以强制它为1。
B=zeros(size(A));
B(A==10)=c;