[c ++和opencv获取并将像素颜色设置为Mat

问题描述 投票:39回答:3

我正在尝试将一些像素的新颜色值设置为cv :: Mat图像,其代码如下:

    Mat image = img;
    for(int y=0;y<img.rows;y++)
    {
        for(int x=0;x<img.cols;x++)
        {
        Vec3b color = image.at<Vec3b>(Point(x,y));
        if(color[0] > 150 && color[1] > 150 && color[2] > 150)
        {
            color[0] = 0;
            color[1] = 0;
            color[2] = 0;
            cout << "Pixel >200 :" << x << "," << y << endl;
        }
        else
        {
            color.val[0] = 255;
            color.val[1] = 255;
            color.val[2] = 255;
        }
    }
    imwrite("../images/imgopti"+to_string(i)+".tiff",image);

似乎在输出中(带有cout)获得了良好的像素,但是在输出图像中(具有imwrite),相关像素没有被修改。我已经尝试过使用color.val [0] ..我仍然不知道为什么输出图像中的像素颜色不会改变。谢谢

c++ opencv image-processing pixel mat
3个回答
62
投票

除了将新的像素值复制回图像之外,您已进行了所有操作。

此行将像素的副本复制到局部变量中:


16
投票

仅使用参考:


13
投票

出于性能原因,我不会使用.at。

© www.soinside.com 2019 - 2024. All rights reserved.