OpenCV: 读取图片中某个点的像素值

读取图片中某个点的像素值


RGB图 → \rightarrow 降噪 → \rightarrow Gray图 → \rightarrow 两次降采样 → \rightarrow 边缘检测图
此例子中未降噪

注意:
此图来源

创建时先列后行

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

访问时先行后列

//访问某个像素点
(uint)img_gry.at<uchar>(y,x) //行,列

main.cpp

#include <opencv2/opencv.hpp>

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<cv::Vec3b>(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<uchar>(y,x) << std::endl;
    //两次降采样后,同一个像素点的坐标变为原坐标的1/4
    x /=4, y/=4;
    //将边缘检测图中像素点(4,8)设置为255
    img_cny.at<uchar>(x,y)=255;
    //输出经过图层金字塔降采样后的边缘检测图中像素点(4,8)
    std::cout<<"Pyrimaid2 pixel there is" << ":" << (uint)img_cny.at<uchar>(y,x) << std::endl;
    //显示边缘检测图
    cv::imshow("Example_Canny",img_cny);
    //等待键盘事件
    cv::waitKey(0);	//0或负数,程序会无限等待直到有键盘事件
    return 0;
}

未对下图中的值进行强制类型转换,导致出现终端显示乱码


对上面的问题进行处理 (强制类型转换)


像素点(16,32)的读取结果(136,122,104)
灰度图中像素点(16,32)的值为118
两次降采样后像素点(4,8)的值为0(黑色)

灰度图

修改像素点(4,8)的值变为255 (白色)

img_cny.at<uchar>(x,y)=255;

两次降采样后的边缘检测图

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Uncertainty!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值