学习OpenCV3|OpenCV: 读取图片中某个点的像素值

读取图片中某个点的像素值 学习OpenCV3|OpenCV: 读取图片中某个点的像素值
文章图片

RGB图→ \rightarrow → 降噪→ \rightarrow → Gray图→ \rightarrow → 两次降采样→ \rightarrow → 边缘检测图
此例子中未降噪
学习OpenCV3|OpenCV: 读取图片中某个点的像素值
文章图片

注意:
此图来源
学习OpenCV3|OpenCV: 读取图片中某个点的像素值
文章图片

【学习OpenCV3|OpenCV: 读取图片中某个点的像素值】创建时先列后行

//确定某个像素点 cv::Vec3b intensity=img_rgb.at(x,y); //列,行

访问时先行后列
//访问某个像素点 (uint)img_gry.at(y,x) //行,列

main.cpp
#include int main() {//实例化矩阵 cv::Mat img_rgb,img_gry,img_cny,img_pyr,img_pyr2; //创建窗口放置灰度图 cv::namedWindow("Example_Gray",cv::WINDOW_AUTOSIZE); //创建窗口放置边缘检测图 cv::namedWindow("Example_Canny",cv::WINDOW_AUTOSIZE); //读取图片 img_rgb=cv::imread("/home/.../Projects/CLionProjects/opencv_5/470111.jpg"); //RGB转灰度图 cv::cvtColor(img_rgb,img_gry,cv::COLOR_BGR2GRAY); //显示灰度图 cv::imshow("Example_Gray",img_gry); //第一次降采样 cv::pyrDown(img_gry,img_pyr); //第二次降采样 cv::pyrDown(img_pyr,img_pyr2); //Canny边缘检测器 cv::Canny(img_pyr2,img_cny,10,100,3,true); //读写pixel(x:16,y:32) int x=16,y=32; //img_rgb.at<>()确定某个像素点 cv::Vec3b intensity=img_rgb.at(x,y); //像素点(16,32)的三个通道 uchar blue=intensity[0]; uchar green=intensity[1]; uchar red=intensity[2]; //输出RGB图中像素点At(x,y)=(16,32):(blue,green,red)以及此像素点的三个通道值 std::cout<<"At(x,y)=("<< x << "," << y << "):(blue,green,red)=(" << (uint)blue <<","<< (uint)green <<","<< (uint)red << ")" << std::endl; //输出灰度图中像素点(16,32) std::cout<< "Gray pixel there is" << ":"<<(uint)img_gry.at(y,x) << std::endl; //两次降采样后,同一个像素点的坐标变为原坐标的1/4 x /=4, y/=4; //将边缘检测图中像素点(4,8)设置为255 img_cny.at(x,y)=255; //输出经过图层金字塔降采样后的边缘检测图中像素点(4,8) std::cout<<"Pyrimaid2 pixel there is" << ":" << (uint)img_cny.at(y,x) << std::endl; //显示边缘检测图 cv::imshow("Example_Canny",img_cny); //等待键盘事件 cv::waitKey(0); //0或负数,程序会无限等待直到有键盘事件 return 0; }

未对下图中的值进行强制类型转换,导致出现终端显示乱码
学习OpenCV3|OpenCV: 读取图片中某个点的像素值
文章图片

学习OpenCV3|OpenCV: 读取图片中某个点的像素值
文章图片

对上面的问题进行处理 (强制类型转换)
学习OpenCV3|OpenCV: 读取图片中某个点的像素值
文章图片

像素点(16,32)的读取结果(136,122,104)
灰度图中像素点(16,32)的值为118
两次降采样后像素点(4,8)的值为0(黑色)
学习OpenCV3|OpenCV: 读取图片中某个点的像素值
文章图片

灰度图
修改像素点(4,8)的值变为255 (白色)
img_cny.at(x,y)=255;

两次降采样后的边缘检测图
学习OpenCV3|OpenCV: 读取图片中某个点的像素值
文章图片

    推荐阅读