如何在opencv中使用蒙版图像绘制矩形?

时间:2015-03-17 11:43:50

标签: c++ opencv image-processing

遮罩图片

Mask image

结果图片

Result image

预期图片

Expected image

是否有任何功能使用opencv绘制带有蒙版图像的矩形?我附上了预期的图像。请帮我。提前谢谢。

2 个答案:

答案 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);
}