在OpenCV C++中将图像区域设置为零的最佳方法?

Nfy*_*fys 6 c++ opencv

我想问一下哪种方法是将灰度Mat图像的区域设置为零(或任何其他常量值)的最有效方法.

我应该创建一个零图像,然后使用copyTo()或有更好的方法吗?

Rog*_*and 11

我会用setTo(),例如:

// load an image
cv::Mat pImage = cv::imread("someimage.jpg", CV_LOAD_IMAGE_COLOR);

// select a region of interest
cv::Mat pRoi = pImage(cv::Rect(10, 10, 20, 20));

// set roi to some rgb colour   
pRoi.setTo(cv::Scalar(blue, green, red));
Run Code Online (Sandbox Code Playgroud)

  • 实际上它是`cv :: Scalar(蓝色,绿色,红色)`,见http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#cvtcolor (3认同)

Lov*_*ill 5

假设我们在白色画布上绘制了一个黑色矩形:

    cv::Mat img(100,100,CV_8U,cv::Scalar(255));
    img(cv::Rect(15,15,20,40))=0;
    cv::imshow("Img",img);
    cv::waitKey();
Run Code Online (Sandbox Code Playgroud)