遮罩图片
结果图片
预期图片
是否有任何功能使用opencv绘制带有蒙版图像的矩形?我附上了预期的图像。请帮我。提前谢谢。
答案 0 :(得分:1)
我认为你问的问题不太清楚,但如果第一张图片是原始图片(圆圈),第二张图片(矩形)是你的二元蒙版图片,你想在原始图像上应用那个蒙版,你可以按照以下方式应用面具:
inputMat.copyTo(outputMat, maskMat);
Src。: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
Src。:https://stackoverflow.com/a/18136171/4767895
如果我误解了你的问题,请随时回复。
答案 1 :(得分:0)
尝试使用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);
}