【发布时间】:2015-03-17 11:43:50
【问题描述】:
蒙版图片
结果图片
预期图像
有没有使用opencv绘制带有蒙版图像的矩形的功能?我附上了预期的图像。请帮我。提前致谢。
【问题讨论】:
标签: c++ opencv image-processing
蒙版图片
结果图片
预期图像
有没有使用opencv绘制带有蒙版图像的矩形的功能?我附上了预期的图像。请帮我。提前致谢。
【问题讨论】:
标签: c++ opencv image-processing
我认为您提出的问题不是很清楚,但如果第一张图像是您的原始图像(圆形),第二张(矩形)是您的二进制蒙版图像,并且您想在原始图像上应用该蒙版,然后您可以按如下方式应用蒙版:
inputMat.copyTo(outputMat, maskMat);
来源:https://stackoverflow.com/a/18161322/4767895
如果您尚未创建二进制掩码,请按以下方式创建: 创建一个与原始图像大小相同的蒙版(全部设置为零),并在其中绘制一个具有特定大小的填充矩形(全部设置为一)。
cv::Mat mask = cv::Mat::zeros(Rows, Cols, CV_8U); // all 0
mask(Rect(StartX,StartY,Width,Height)) = 1; //make rectangle 1
来源:https://stackoverflow.com/a/18136171/4767895
如果我误解了您的问题,请随时回复。
【讨论】:
尝试使用 Opencv 中提供的布尔运算
请参考此代码 (source)。我已经添加了所有的按位运算,以备不时之需。
int main( )
{
Mat drawing1 = Mat::zeros( Size(400,200), CV_8UC1 );
Mat drawing2 = Mat::zeros( Size(400,200), CV_8UC1 );
drawing1(Range(0,drawing1.rows),Range(0,drawing1.cols/2))=255; imshow("drawing1",drawing1);
drawing2(Range(100,150),Range(150,350))=255; imshow("drawing2",drawing2);
Mat res;
bitwise_and(drawing1,drawing2,res); imshow("AND",res);
bitwise_or(drawing1,drawing2,res); imshow("OR",res);
bitwise_xor(drawing1,drawing2,res); imshow("XOR",res);
bitwise_not(drawing1,res); imshow("NOT",res);
waitKey(0);
return(0);
}
【讨论】: