C++ 在openCV中访问特定图像中所有像素的RGB值
我已经彻底搜索了互联网和stackoverflow,但我没有找到我要找的东西 如何在OpenCV中获取特定图像(图像的所有像素)的RGB(BGR)值?我使用C++,图像存储在CV::Mat变量。 我展示了到目前为止我的一些努力:我从另一个stackoverflow链接尝试了这段代码。但是每次我重新运行代码时,十六进制的值都会改变!例如,一旦它的00CD5D7C,在下一次运行中它就是00C09D7CC++ 在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_
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];