Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
十六进制的OpenCV RGB值? < >我已经成功地使用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; 模板 类帧数据{ IplImage*imgp; 公众: 帧_数据(IplImage*img=0){imgp=img;} ~Frame_Data(){imgp=0;} void运算符=(IplImage*img){imgp=img;} 内联帧*运算符[](内联行索引){ 返回((帧*)(imgp->imageData+rowIndex*imgp->widthStep)); } }; 类型定义结构{ 无符号字符b,g,r; }RGB像素; 类型定义结构{ 浮子b,g,r; }RgbPixelFloat; typedef Frame_数据RgbImage;_C++_Image Processing_Opencv - Fatal编程技术网

十六进制的OpenCV RGB值? < >我已经成功地使用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; 模板 类帧数据{ IplImage*imgp; 公众: 帧_数据(IplImage*img=0){imgp=img;} ~Frame_Data(){imgp=0;} void运算符=(IplImage*img){imgp=img;} 内联帧*运算符[](内联行索引){ 返回((帧*)(imgp->imageData+rowIndex*imgp->widthStep)); } }; 类型定义结构{ 无符号字符b,g,r; }RGB像素; 类型定义结构{ 浮子b,g,r; }RgbPixelFloat; typedef Frame_数据RgbImage;

十六进制的OpenCV RGB值? < >我已经成功地使用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; 模板 类帧数据{ IplImage*imgp; 公众: 帧_数据(IplImage*img=0){imgp=img;} ~Frame_Data(){imgp=0;} void运算符=(IplImage*img){imgp=img;} 内联帧*运算符[](内联行索引){ 返回((帧*)(imgp->imageData+rowIndex*imgp->widthStep)); } }; 类型定义结构{ 无符号字符b,g,r; }RGB像素; 类型定义结构{ 浮子b,g,r; }RgbPixelFloat; typedef Frame_数据RgbImage;,c++,image-processing,opencv,C++,Image Processing,Opencv,然后,Im使用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; for(int i=ymin;i

然后,Im使用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;
for(int i=ymin;i
假设我想加入一个IF语句来检查像素数据的颜色,我看到一些网站把它们列为

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

or if g < 0x20
image[i][j].r=0xFF;
或者如果g<0x20
我不习惯十六进制的值,我试着查找它们,但找不到任何引用,我习惯于cvscalars,那么这些是什么意思?比如0x20代表什么?或者0xFF代表什么


谢谢

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

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

例如:

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

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

G(绿色组件)至
0.5*0xFF=0x7F

B(蓝色组件)至
0.3*0xFF=0x26


alpha会自动设置为
1.0或0xFF

十六进制只是数字的另一种表示形式(基数16)

习惯并不难,你只需要学会如何转换成10进制的数字。 打开您喜爱的windows/mac计算器,切换到十六进制模式,然后键入FF。(0x前缀只告诉代码它是十六进制数)

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

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

float Scalar=static_cast(Decimal)/255.f;//255是字节颜色的最大值

享受Hex!您会发现它是一种非常有用、整洁且重要的数据查看方式