在OpenCV垫图像中显示Vec3b像素值
Show Vec3b pixel values in OpenCV Mat image
我想知道垫子图像中Vec3b像素的值。我不是真正的OpenCV专家。我的 Vec3b 是,如果我打印 Vec3b:
Vec3b centralIntensity;
cx=70; cy=700;
centralIntensity = (Vec3b)imgTemp->at<Vec3b>(cx, cy);
cout<<"I:["<<cx<<","<<cy<<"]="<<centralIntensity<<endl;
我得到:
I:[70,700]=[150, 162, 160]
如果我打印单个值:
cout<<"***Uchar:["<<cx<<","<<cy<<"]="<<int(centralIntensity[0])<<","<<int(centralIntensity[1])<<","<<int(centralIntensity[2])<<endl;
我得到:
乌查尔:[70,700]=127,0,0
我注意到,如果我更改坐标,最后的打印总是相同的。由于我必须比较不同通道上的强度像素,那么了解BGR通道中的像素值的好方法是什么?
***EDIT1:这就是我创建垫子图像的方式(我已经有一个垫子 imgIn 作为输入(,我以另一种方式显示 Vec3b:
Mat *imgTemp;
uchar cblue, blue, cgreen;
imgTemp = new Mat(imgIn->size(), CV_8UC3);
imgIn->convertTo(*imgTemp, CV_8UC3);
Vec3b centralIntensity;
centralIntensity = (Vec3b)imgTemp->at<Vec3b>(cx, cy);
cout<<"I:["<<cx<<","<<cy<<"]="<<centralIntensity<<endl;
centralIntensity[0] = cblue;
centralIntensity[1] = cgreen;
centralIntensity[2] = cred;
cout<<"I:["<<cx<<","<<cy<<"]="<<centralIntensity<<endl;
cout<<"***Uchar:["<<cx<<","<<cy<<"]="<<int(centralIntensity[0])<<","<<int(centralIntensity[1])<<","<<int(centralIntensity[2])<<endl;
cout<<"***Uchar:["<<cx<<","<<cy<<"]="<<int(cblue)<<","<<int(cgreen)<<","<<int(cred)<<endl;
我得到:
I:[70,700]=[150, 162, 160]
Uchar:[70,700]=127,0,0
Uchar:[70,700]=127,0,0
如果我更改坐标?
I:[300,400]=[109, 123, 105]
***Uchar:[300,400]=127,0,0
***Uchar:[300,400]=127,0,0
您正在用未初始化的值cblue
、cred
、cgreen
覆盖centralIntensity
,这些值内部将具有随机值。
只需更正作业:
cblue = centralIntensity[0];
cgreen = centralIntensity[1];
cred = centralIntensity[2];
-
对于 Vec3b ,你可以这样做,
Mat image = imread("img_Path"); for(int y=0;y<img.rows;y++) { for(int x=0;x<img.cols;x++) { // get pixel Vec3b color = image.at<Vec3b>(x, y); //color.val[0] // B //color.val[1] // G //color.val[2] // R } }
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 如何使用 freetype2 访问单色位图中的像素状态
- 尝试渲染像素坐标时,简单线条渲染失败
- 计算另一个图像像素满足条件的像素值的平均值
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- 在OpenCV垫图像中显示Vec3b像素值
- 比较OpenCV中的强度像素值Vec3b
- C++ OpenCV 函数"mat.at<Vec3b>(Point(j, i))"无法生成正确的像素值并崩溃