gpt4 book ai didi

c++ - 十六进制的 OpenCV RGB 值?

转载 作者:太空宇宙 更新时间:2023-11-03 22:35:37 25 4
gpt4 key购买 nike

所以我已经使用 opencv 网页上的 c++ 框架访问包装器成功访问了框架中的像素数据

template<class Frame> 
class Frame_Data {
IplImage *imgp;
public:
Frame_Data (IplImage *img=0) {imgp = img;}
~Frame_Data () {imgp = 0;}
void operator=(IplImage *img) {imgp=img;}
inline Frame* operator[] (int rowIndex) {
return ((Frame*)(imgp->imageData + rowIndex*imgp->widthStep));
}
};

typedef struct {
unsigned char b,g,r;
} RgbPixel;
typedef struct {
float b,g,r;
} RgbPixelFloat;

typedef Frame_Data<RgbPixel> RgbImage;

然后我使用 2 个 for 循环遍历帧像素数组,例如:

for (int i = ymin; i < ymax; i++) 
{
for (int j = xmin; j < xmax; j++)
{
int r = image[i][j].r;
int g = image[i][j].g;
int b = image[i][j].b;

假设我想加入一个 IF 语句来检查像素数据颜色。我看到一些网站将它们列为

image[i][j].r=0xFF;

or if g < 0x20

我不习惯十六进制值,我试图查找它们但找不到任何引用,我习惯了 cvscalars,那么这些是什么意思?比如 0x20 代表什么?或者 0xFF 呢?

谢谢

最佳答案

您看到的从 0x00 ... 0xFF 的范围是一个 byte,它可以包含 0 到 255 之间的值,即如何存储像素颜色数据,通常为 3 或 4 个字节,由红色、蓝色、绿色和可选的 Alpha 组成。

CvScalar 只是 1、2、3 或 4 个 double 的便利容器,可用于以稍微不同的形式保存这些值。

例如:

cv.RGB(1.0, 0.5, 0.3) 将颜色的红色分量设置为 1.0 或 100%,将绿色分量设置为 0.5 或 50 % 和蓝色分量为 0.3 或 30%。当创建实际的颜色结构时,这些组件中的每一个都将由一个 byte 组成,因此这类似于设置

R(红色分量)到 1.0 * 0xFF = 0xFF

G(绿色分量)到 0.5 * 0xFF = 0x7F

B(蓝色分量)到 0.3 * 0xFF = 0x26

alpha 自动设置为 1.0 或 0xFF

关于c++ - 十六进制的 OpenCV RGB 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4202656/

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