• C++opencv-像素操作


    在Windows下,RGB存储的顺序为BGR

    方法一

    #include <opencv2/opencv.hpp> 
    
    int main()
    {
        
        cv::Mat img = cv::imread("./tu/马.jpg", cv::IMREAD_UNCHANGED); 
    
        size_t rr=200, c=100;//rr 行号,c 列号
        cv::Vec3b& bgr = img.at<cv::Vec3b>(rr, c); //返回指定行列的像素
        /*
        图像类型:
                cv::Vec3b        三通道彩色(8位)
                unsigned char    单通道灰度
                unsigned short   16位灰度
                float            32位浮点型
                cv::Vec2f        双通道32位
        */
    
        int b = int(bgr[0]);//提取B通道的数据
        //bgr[0] 的数据类型是unsigned char
    
        //bgr[0]=0; //修改B通道的数据
        int g = int(bgr[1]);  //提取G通道的数据
        int r = int(bgr[2]);  //提取R通道的数据
    
        std::cout << typeid(bgr[0]).name() << b << "," << g << "," << r << std::endl;
            
    }

    方法二:指针法

    #include <opencv2/opencv.hpp> 
    
    int main()
    {
        
        cv::Mat img = cv::imread("./tu/马.jpg", cv::IMREAD_UNCHANGED); 
    
        size_t r=200, c=100;//rr 行号,c 列号
        
        int x = img.step[0];//返回图像一行的字节数
        //x=图像的宽*通道数
    
        unsigned char* pRow = img.data + r * img.step[0];//计算图像指定行行首指针
        //r  行号
        //img.data   返回图像的首地址
        unsigned char rr;
        rr = pRow[3 * c + 2];  //返回r行c列像素的R通道的数据
        x = int(rr);
        //pRow[3 * c + 2]=0; //修改r行c列像素的R通道的数据
        std::cout << x<< std::endl;
            
    }

  • 相关阅读:
    算法-回溯法
    算法-动态规划=背包问题
    算法-贪心算法
    算法-KMP模式匹配算法
    算法-两点之间最短路径
    Hibernate学习笔记
    MyBatis一级缓存和二级缓存
    使用MyBatis-Gererator自动生成Dao.Model.Mapping相关文件
    MyBatis中一对多和多对一的学习详解
    MyBatis中使用添加判断进行查询
  • 原文地址:https://www.cnblogs.com/liming19680104/p/13610302.html
Copyright © 2020-2023  润新知