如何设置cv::Mat1b的像素值

How to set pixel value of a cv::Mat1b?

本文关键字:Mat1b 像素 cv 何设置 设置      更新时间:2023-10-16

我已经将灰度图像复制到cv::Mat1b中,并且我想循环通过每个像素并读取和更改其值。我该怎么做呢?

我的代码是这样的:

cv::Mat1b newImg;
grayImg.copyTo(newImg);
for (int i = 0; i < grayImg.rows; i++) {
        for (int j = 0; i < grayImg.cols; j++) {
            int pixelValue = static_cast<int>(newImg.at<uchar>(i, j));
            if(pixelValue > thresh)
                newImg.at<int>(i,j) = 0;
            else
                newImg.at<int>(i, j) = 255;         
        }
    }

但是在赋值中(在ifelse内部),我得到了错误Access violation writing location

如何正确读取和写入特定像素?

谢谢!

编辑

感谢@Miki和@Micka,我是这样解决的:

for (int i = 0; i < newImg.rows; i++) {
        for (int j = 0; j < newImg.cols; j++) {
            // read :
            cv::Scalar intensity1 = newImg.at<uchar>(i,j);
            int intensity = intensity1.val[0];
            // write :
            newImg(i, j) = 255;
    }
}
newImg.at<int>(i,j)
应该

newImg.at<uchar>(i,j) 

因为cv::Mat1b是uchar类型

我建议:

cv::Mat1b newImg;
newImg = grayImg > thresh ;

cv::Mat1b newImg;
newImg = grayImg < thresh ;

也看一下OpenCV教程,了解如何通过图像的每一个像素