十六进制的OpenCV RGB值?

Posted

技术标签:

【中文标题】十六进制的OpenCV RGB值?【英文标题】:OpenCV RGB values in hex? 【发布时间】:2010-11-17 08:30:10 【问题描述】:

所以我已经使用 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 呢?

谢谢

【问题讨论】:

【参考方案1】:

您看到的0x00 ... 0xFF 的范围是一个byte,它可以保存0 and 255 之间的值,这就是像素颜色数据的存储方式,通常为 3 或 4 个字节,由红色、蓝色、绿色和可选 Alpha。

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

例如:

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

R(红色部分)转1.0 * 0xFF = 0xFF

G(绿色部分)转0.5 * 0xFF = 0x7F

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

alpha 自动设置为1.0 or 0xFF

【讨论】:

【参考方案2】:

十六进制只是数字(以 16 为底)的另一种表示形式。

习惯起来并不难,您只需要学习如何与常规的以 10 为基数的数字相互转换即可。 打开你最喜欢的 windows/mac 计算器,切换到十六进制模式,然后输入 FF。 (0x 前缀只是告诉代码它是十六进制数)

切换到 Dec[imal],数字将变为 255。 在十进制模式下输入 32,然后单击十六进制,您会看到数字变为 20(或代码中的 0x20)

现在你可以从十六进制转换为十进制,你可以很容易地从十进制转换为标量;只需转换范围即可;

float Scalar = static_cast&lt;float&gt;( Decimal ) / 255.f; // 255 being the largest value for your byte-colour

享受十六进制!您会发现它是一种非常有用、简洁且重要的数据查看方式。

【讨论】:

以上是关于十六进制的OpenCV RGB值?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得十六进制颜色值而不是 RGB 值?

如何获得十六进制颜色值而不是RGB值?

如何在 C++ 中将 RGB 颜色值转换为十六进制值?

RGB颜色值与十六进制颜色的转换

RGB颜色值与十六进制颜色码转换工具

详细请教:关于十进制RGB颜色值转换十六进制颜色值的算法