访问 openCV 中某个图像中所有像素的 RGB 值
Accessing RGB values of all pixels in a certain image in openCV
我已经彻底搜索了互联网和堆栈溢出,但我没有找到我到底在寻找什么!
如何在OpenCV中获取某个图像(图像的所有像素)的RGB(实际上是BGR)值?我正在使用C++,图像存储在 cv::Mat 变量中。
到目前为止,我展示了我的一些努力:我从另一个堆栈溢出链接尝试了这段代码。但是每次我重新运行代码时,十六进制中的值都会改变!例如,一旦它的 00CD5D7C,在下一次运行中它是 00C09D7C。
cv::Mat img_rgb = cv::imread("img6.jpg");
Point3_<uchar>* p = img_rgb.ptr<Point3_<uchar> >(10,10);
p->x; //B
p->y; //G
p->z; //R
std::cout<<p;
在另一次尝试中,我使用了另一个答案中的代码。此处输出始终为 -858993460。
img_rgb.at<cv::Vec3b>(10,10);
img_rgb.at<cv::Vec3b>(10,10)[0] = newval[0];
img_rgb.at<cv::Vec3b>(10,10)[1] = newval[1];
img_rgb.at<cv::Vec3b>(10,10)[2] = newval[2];
cout<<newval[0]; //For cout<<newval[1]; cout<<newval[2]; the result is still same
注意:我使用(10,10)作为测试来获取RGB,我的目标是获取整个图像的RGB值!
由于您正在加载彩色图像(类型 CV_8UC3
),因此您需要使用 .at<Vec3b>(row, col)
访问其元素。元素按 BGR 顺序排列:
Mat img_bgr = imread("path_to_img");
for(int r = 0; r < img_bgr.rows; ++r) {
for(int c = 0; c < img_bgr.cols; ++c) {
std::cout << "Pixel at position (x, y) : (" << c << ", " << r << ") =" <<
img_bgr.at<Vec3b>(r,c) << std::endl;
}
}
您还可以简化使用 Mat3b
(又名 Mat_<Vec3b>
),因此您不需要使用 .at
函数,而是直接使用括号:
Mat3b img_bgr = imread("path_to_img");
for(int r = 0; r < img_bgr.rows; ++r) {
for(int c = 0; c < img_bgr.cols; ++c) {
std::cout << "Pixel at position (x, y) : (" << c << ", " << r << ") =" <<
img_bgr(r,c) << std::endl;
}
}
要获取每个通道,您可以轻松执行以下操作:
Vec3b pixel = img_bgr(r,c); // or img_bgr.at<Vec3b>(r,c)
uchar blue = pixel[0];
uchar green = pixel[1];
uchar red = pixel[2];
相关文章:
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 如何将RGB像素缓冲区转换为IRandomAccessStream^
- 提取肮脏的RGB像素缓冲区数据Directx
- 不能通过基于指针的访问像素强度来分割 RGB 图像
- 访问 openCV 中某个图像中所有像素的 RGB 值
- 如何在Qt 5中从QGraphicsScene中获取像素单击或鼠标悬停的RGB值
- OPENCV OBATIN基于掩码的某些像素RGB值
- 如何从窗口中获取像素数据像素缓冲区并提取RGB
- glDrawPixels输出一些像素,其RGB值不完全达到预期
- 从 HBITMAP 获取特定像素的 RGB 值
- 使用 Magick++ 获取C++中的像素 RGB 值 0-255
- C++像素抓取器的RGB值错误
- 从bmp文件读取RGB像素
- 将图像中的像素与RGB颜色进行比较
- RGB像素透明度
- 使用CImg-Visual C++2008编辑RGB像素数据
- 从uint8c++中获取RGB像素值
- 从像素值获得RGB通道没有任何库
- c++ RGB值从像素选择由用户使用seekg
- 对BMP像素RGB数组应用模糊