将像素值写入空白矩阵

Writing pixel value to blank matrix

本文关键字:空白 像素      更新时间:2023-10-16

遇到了一些问题。举个简单的例子,比如说我想查找灰度图像的强度值,并将其写入一个新的阵列,但假设将强度更改一定的量。我该如何使用opencv进行此操作?我一直在尝试一些类似的东西来尝试和练习:

int main(int argc, char** argv){
    Mat img = imread(argv[1], CV_LOAD_IMAGE_UNCHANGED), img_grey, dst;
    if (img.empty())
    {
        return -1;
    }
    cvtColor(img, img_grey, CV_BGR2GRAY);
    dst = Mat::zeros(img_grey.size(), img_grey.type());
    for
        (int x = 1; x < dst.rows - 1; x++)
    {
        for (int y = 1; y < dst.cols - 1; y++)
        {
            dst.at<uchar>(y, x) = x;
        }
    }
    namedWindow("New", CV_WINDOW_AUTOSIZE);
    namedWindow("Original", CV_WINDOW_AUTOSIZE);
    imshow("New", dst);
    imshow("Original", img);

    waitKey(0);
    return 0;
}

给定访问图像的方式,您应该更改

dst.at<uchar>(y, x) = x;

dst.at<uchar>(x, y) = x;

查看Mat::at()了解更多信息。


编辑:正如@Micka所指出的,你真的应该重命名你的xy,因为x通常被假设为水平轴,对应于"列方向"。正常使用情况如下:

for(int y = 0; y < mat.rows; y++)
    for(int x = 0; x < mat.cols; x++)
        mat.at<uchar>(y,x) = ...;