0

有我用于创建蒙版的代码和屏幕截图,蒙版的大小没有覆盖所有原始帧似乎很奇怪。请问这里有什么提示吗?

    *cap >> frame1;
    Rect roi(100,100,100,100);
    for(int i =0; i<frame1.rows; i++)
    {
        for(int j=0; j<frame1.cols;j++)
        {
            if(!roi.contains(Point(i,j)))
            {
                frame1.at<uchar>(i,j) = 0;
            }
        }
    }

在此处输入图像描述

4

1 回答 1

0

我的假设是这frame1是一个彩色图像并且有 type CV_8UC3。尝试frame1按照frame_gray以下代码片段创建和填写:

cv::Mat3b frame_color;
*cap >> frame_color;
cv::Mat1b frame_gray;
cv::cvtColor(frame_color, frame_gray, CV_BGR2GRAY)

或者如果您不喜欢更改类型,请frame1使用以下代码:

*cap >> frame1;
Rect roi(100,100,100,100);
for(int i =0; i<frame1.rows; i++)
{
    for(int j=0; j<frame1.cols;j++)
    {
        if(!roi.contains(Point(i,j)))
        {
            frame1.at<cv::Vec3b>(i,j) = cv::Vec3b::all(0);
        }
    }
}

或者哪个更短(未经测试,但想法应该很清楚):

*cap >> frame1;
Rect roi(100,100,100,100);
cv::Mat3b color_mask = cv::Mat3b::ones(frame1.size());
color_mask(roi) = cv::Mat3b::zeros(roi.size());
frame1 = frame1.mul(color_mask);
于 2013-04-11T15:48:25.257 回答