【问题标题】:How to draw rectangle with mask image in opencv?如何在opencv中用蒙版图像绘制矩形?
【发布时间】:2015-03-17 11:43:50
【问题描述】:

蒙版图片

结果图片

预期图像

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

【问题讨论】:

    标签: c++ opencv image-processing


    【解决方案1】:

    我认为您提出的问题不是很清楚,但如果第一张图像是您的原始图像(圆形),第二张(矩形)是您的二进制蒙版图像,并且您想在原始图像上应用该蒙版,然后您可以按如下方式应用蒙版:

    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

    如果我误解了您的问题,请随时回复。

    【讨论】:

      【解决方案2】:

      尝试使用 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);
      }
      

      【讨论】:

      • 链接死了。最好包括对方法的描述和一些示例代码(毕竟只有一行)。
      • 我做了一些小的修改,包括添加回代码源的链接。我原本打算建议您在链接的 addition 中提供代码,而不是代替。归因仍然很重要。如果您不同意我的任何修改,请随时更改或恢复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      相关资源
      最近更新 更多