Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.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/9/opencv/3.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
C++ 在openCV中访问特定图像中所有像素的RGB值_C++_Opencv_Rgb_Pixel - Fatal编程技术网

C++ 在openCV中访问特定图像中所有像素的RGB值

C++ 在openCV中访问特定图像中所有像素的RGB值,c++,opencv,rgb,pixel,C++,Opencv,Rgb,Pixel,我已经彻底搜索了互联网和stackoverflow,但我没有找到我要找的东西 如何在OpenCV中获取特定图像(图像的所有像素)的RGB(BGR)值?我使用C++,图像存储在CV::Mat变量。 我展示了到目前为止我的一些努力:我从另一个stackoverflow链接尝试了这段代码。但是每次我重新运行代码时,十六进制的值都会改变!例如,一旦它的00CD5D7C,在下一次运行中它就是00C09D7C cv::Mat img_rgb = cv::imread("img6.jpg"); Point3_

我已经彻底搜索了互联网和stackoverflow,但我没有找到我要找的东西

如何在OpenCV中获取特定图像(图像的所有像素)的RGB(BGR)值?我使用C++,图像存储在CV::Mat变量。 我展示了到目前为止我的一些努力:我从另一个stackoverflow链接尝试了这段代码。但是每次我重新运行代码时,十六进制的值都会改变!例如,一旦它的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;
cv::Mat img_rgb=cv::imread(“img6.jpg”);
点3_*p=img_rgb.ptr(10,10);
p->x//B
p->y//G
p->z//R

std::cout由于您正在加载彩色图像(类型为
CV_8UC3
),因此需要使用
.at(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;
    }
}
要获得每个通道,您可以轻松执行以下操作:

 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];
Vec3b pixel=img_bgr(r,c);//或位于(r,c)的img_bgr
乌查尔蓝=像素[0];
uchar绿色=像素[1];
乌查尔红=像素[2];

看起来您甚至都没有试图理解自己在做什么。使用
std::cout@Miki没有意识到我这么愚蠢!谢谢你的回答:)它工作得很好。可能是@TylerH的复制品,这个解决方案对我来说不起作用,解释也不起作用!很好的解释,先生,非常感谢!我发现你的电子邮件地址,我想我会在不久的将来打扰你更多的计算机视觉新手。TousifZAMAN请考虑在STACKOFFAST上发布未来的问题,而不是在电子邮件中,这样社区也能从这些回答中受益。我将向他介绍这方面的一些技巧和建议。我认为StackOverflow不是适合那些人的地方。@Miki LOL没问题,我已经发布了一个新问题!请看一看:)
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];