gpt4 book ai didi

c++ - OpenCV 2.x 中的像素访问错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:04 31 4
gpt4 key购买 nike

我在尝试找出如何在 OpenCV 的新版本 (2.x) 中访问 rgb 像素时遇到了问题。我尝试混合使用新旧方法,但没有成功。

这是我的代码

#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>

using namespace cv;
using namespace std;

int main (int argc, char* argv[])
{
Mat img;


string winMain = "Main";

img = imread(argv[1]);

for (int j = 0; j < img.rows; j++)
{
for (int i = 0; i < img.cols; i++)
{
img.data[j * img.cols + i * 3 + 0] = (uchar)0; //B
//img.data[j * img.cols + i + 1] = (uchar)0; //G
//img.data[j * img.cols + i + 2] = (uchar)0; //R
}
}

namedWindow(winMain);

imshow(winMain, img);

waitKey();

return 1;
}

正如您在以下示例中所注意到的,只有三分之一的图像被修改。

Link to example

感谢帮助

最佳答案

我测试了您的代码,发现了错误。您将列索引乘以 3 (i * 3),但还需要将行索引乘以 3 (j * img.cols * 3).

我将 j * img.cols 替换为 j * img.cols * 3:

for (int j = 0; j < img.rows; j++)
{
for (int i = 0; i < img.cols; i++)
{
img.data[j * img.cols * 3 + i*3 + 0] = (uchar)0; //B
//img.data[j * img.cols * 3 + i*3 + 1] = (uchar)0; //G
//img.data[j * img.cols * 3 + i*3 + 2] = (uchar)0; //R
}
}

让我们试一个例子。

示例图片(来自 MIT pedestrian dataset ):

original img

使用 OP 代码的结果:

OP's code

使用修改后的代码(j * img.cols * 3)的结果:

New code

关于c++ - OpenCV 2.x 中的像素访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463677/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com