c++ - 将像素值写入空白矩阵

标签 c++ opencv

在这方面遇到了一些麻烦。举一个简单的例子,假设我想查找灰度图像的强度值并将它们写入一个新数组,但假设将强度更改一定量。我将如何使用 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) = ...;

关于c++ - 将像素值写入空白矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26607178/

相关文章:

c++ - 不同h文件中的两个类相互使用时如何解决编译错误?

c++ - 用自定义删除器封装 C 类型指针的常用方法

c++ - OpenCV如何在使用单个静态图像时将速度 vector 绘制为箭头

c++ - 什么是C++运行时概念?

c++ - 在 C/C++ 中声明和使用 FILE * 指针的正确方法是什么?

c++ - 从类中 move vector (与 2013 编译器相比)

python-3.x - 在 Tkinter 标签内循环 OpenCV 图像 - 使用 esp32-cam

python - 使用opencv python检测白色 Blob

python - 可以使用Python 3.5.2下载OpenCV吗?

OpenCV cvtColor CV_BGR2HSV CV_32FC3 饱和度范围