【问题标题】:OpenCV RGB values in hex?十六进制的OpenCV RGB值?
【发布时间】: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 呢?

谢谢

【问题讨论】:

    标签: c++ image-processing opencv


    【解决方案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

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

      【讨论】:

        猜你喜欢
        • 2021-03-22
        • 1970-01-01
        • 1970-01-01
        • 2021-02-17
        • 1970-01-01
        • 2016-02-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多