在 OpenCV 中设置像素值(奇怪的结果)

Setting pixel values in OpenCV (strange result)

我正在尝试这个简单的代码:

int main()

{
    Mat a = Mat::zeros(Size(200,200) , CV_8UC1); Mat b;
    b = a;
    for(int i=0 ; i< a.rows ; i++)
    {
        for(int j = 0 ; j< a.cols ; j++)
        {
            a.at<int>(i,j) =  100;
        }
    }

    namedWindow("one" , WINDOW_AUTOSIZE);
    namedWindow("two" , WINDOW_AUTOSIZE);

    imshow("one", a);
    imshow("two", b);


    waitKey();

    return 0;
}

但是我得到了一些关于内存映射的奇怪结果。这段代码有什么问题?

这一行的问题。

a.at<int>(i,j) =  100;

您应该将其替换为:

a.at<uint8_t>(i,j) =  100;

或:

a.at<uchar>(i,j) =  100;

因为您将类型设置为 CV_8UC1,所以您必须指定要访问的元素有 8 位。否则你会内存崩溃。

您需要注意如何声明您的 cv::Mat

Mat a = Mat::zeros(Size(200,200) , CV_8UC1);

CV_8UC1 类型的 cv::Mat 使用 8 位类型(unsigned char)。

a.at<int>(i,j) =  100;

此函数调用正在传递模板类型 int(带符号的 32 位整数)。您有类型冲突。

解决方案是:

a.at<uchar>(i,j) =  100;