gpt4 book ai didi

c - openCV 灰度/颜色寻址像素

转载 作者:行者123 更新时间:2023-11-30 15:37:33 28 4
gpt4 key购买 nike

我在我的论文中使用 opencv 用 c++ 编写了一个 block 匹配算法。它正在处理灰度图片并通过其绝对像素地址寻址 IPLImage。

我必须将 IPLImage 分成相同大小的 block (8x8 pxls)。为了访问 block 内的像素值,我计算像素地址并以这种方式访问​​像素值:

 for (int yBlock = 0; yBlock < maxYBlocks; yBlock++){
for (int xBlock = 0; yxlock < maxXBlocks; xBlock++){
for (int yPixel = 0; yPixel < 8; yPixel++){
for (int xPixel = 0; xPixel < 8; xPixel++){

pixelAdress = yBlock*imageWidth*8 + xBlock*8 + yPixel*imageWidth + xPixel;

unsigned char* imagePointer = (unsigned char*)(img->imageData);
pixelValue = imagePointer[pixelAdress];
}
}
}
}

我并没有真正对行和列进行重复,它效果很好!

现在我有一个彩色 IPLImage(无灰度),但不知道如何访问 r、g、b 像素值。

我在这个论坛上找到了这个

for( row = 0; row < img->height; row++ ){
for ( col = 0; col < img->width; col++ ){
b = (int)img->imageData[img->widthStep * row + col * 3];
g = (int)img->imageData[img->widthStep * row + col * 3 + 1];
r = (int)img->imageData[img->widthStep * row + col * 3 + 2];
}
}

但我不确定如何在我计算的像素地址上使用它。将其乘以 3 是否正确(因为我不会迭代行并添加 0、1 或 2?例如:

pixelValueR = imagePointer[pixelAdress*3 + 2]; 
pixelValueG = imagePointer[pixelAdress*3 + 1];
pixelValueB = imagePointer[pixelAdress*3 + 0];

或者我是否必须使用之前使用 imageWidth 的 widthStep,如下所示:

pixelAdressR = pixelAdress = yBlock*img->widthStep*8 + xBlock*8*3 + yPixel*img->widthStep + xPixel*3 + 2;
pixelAdressG = pixelAdress = yBlock*img->widthStep*8 + xBlock*8*3 + yPixel*img->widthStep + xPixel*3 + 1;
pixelAdressB = pixelAdress = yBlock*img->widthStep*8 + xBlock*8*3 + yPixel*img->widthStep + xPixel*3;

等等访问

pixelValueR = imagePointer[pixelAdressR];
pixelValueG = imagePointer[pixelAdressG];
pixelValueB = imagePointer[pixelAdressB];

最佳答案

如果是多 channel Mat(本例中为BGR),您可以通过使用访问单个像素,如here所述。

Vec3b intensity = img.at<Vec3b>(y, x);
uchar blue = intensity.val[0];
uchar green = intensity.val[1];
uchar red = intensity.val[2];

关于c - openCV 灰度/颜色寻址像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22174668/

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