• Opencv图像基础


    一、

    1.图像是由像素组成的,而像素实际上就是带有坐标位置和颜色信息的点。我们把图片想象成由若干行,若干列的点组成的, 现实中有RGB颜色系统,我们可以把图中任意一点(位置在第m行,第n列)的点A表示为A[m,n] = [blue,green,red]

    2.图像亮度

    blue,green,red分别代表蓝绿红,每个数值代表的原色的亮度大小。

    blue,green,red值越大,图像越亮,当[255,255,255]时,图像为纯白色。越小,图像越黑暗,当[0,0,0]时,图像为纯黑。

    3.Vec3b

    Vec3b可以看作是vector<uchar, 3>。

    简单而言就是一个uchar类型的,长度为3的vector向量。

    由于在OpenCV中,使用imread读取到的Mat图像数据,都是用uchar类型的数据存储,对于RGB三通道的图像,每个点的数据都是一个Vec3b类型的数据。使用at定位方法如下:

    img.at<Vec3b>(row, col)[0] = 255;  // 这是指修改B通道数据
    img.at<Vec3b>(row, col)[1] = 255;  // 这是指修改G通道数据
    img.at<Vec3b>(row, col)[2] = 255;  // 这是指修改R通道数据

    //读取图像的像素值
    int b=img.at<Vec3b>(y,x)[0]; // blue
    int g=img.at<Vec3b>(y,x)[1]; // green
    int r=img.at<Vec3b>(y,x)[2]; // red

    4.putText

    cv::putText(matTest,"test",cv::Point(30,30),cv::FONT_HERSHEY_SIMPLEX,1,cv::Scalar(255,0,0),2,cv::LINE_AA,false);

    CV_EXPORTS_W void putText( InputOutputArray img, const String& text, Point org,
    int fontFace, double fontScale, Scalar color,
    int thickness = 1, int lineType = LINE_8,
    bool bottomLeftOrigin = false );

    text:输入的字符串
    org:图像中文本字符串的左下角
    fontFace:字体类型
    fontScale:字体缩放倍数,默认为1,不缩放
    bottomLeftOrigin:坐标起点位置,为true时起点在左下角,为false时起点在左上角

    二、

    #include "opencv2/opencv.hpp"
    #include <QDebug>
    int main(int argc, char *argv[])
    {
        
        cv::Mat matTest(10,20,CV_8UC3);
    
    
        int channels=matTest.channels();
        int rows=matTest.rows;
        int cols=matTest.cols;
        qDebug()<<"matTest channels:"<<channels;
    
        //存取彩色图像的像素
        for(int i=0;i<rows;i++)
        {
           for(int j=0;j<cols;j++)
           {
                matTest.at<cv::Vec3b>(i,j)[0]=0;//b
                matTest.at<cv::Vec3b>(i,j)[1]=0;//g
                matTest.at<cv::Vec3b>(i,j)[2]=255;//r
    
           }
        }
    
        //cv::imshow("matTest",matTest);
    
    
    
        cv::Mat matGray;
    
        cv::cvtColor(matTest, matGray, CV_BGR2GRAY);
    
        int channelsGray=matGray.channels();
        qDebug()<<"matGray channels:"<<channelsGray;
    
    
        for(int i=0;i<matGray.rows;i++)
        {
            for(int j=0;j<matGray.cols;j++)
            {
                matGray.at<uchar>(i,j)=255;
            }
        }
    
        //cv::imshow("matGray",matGray);
    
    
        matTest.release();
        matGray.release();
    
        cv::waitKey(0);
        return 0;
    }
  • 相关阅读:
    Python笔记-面向对象编程
    大学课后答案微信小程序项目实践(1)
    用weexplus从0到1写一个app(2)-页面跳转和文章列表及文章详情的编写
    react基础学习和react服务端渲染框架next.js踩坑
    基于weex的app开发脚手架weexplus学习笔记
    用weexplus从0到1写一个app
    Vue与React两个框架的区别对比
    mpvue学习笔记-之微信小程序数据请求封装
    Flutter/Dart import导入文件关键字总结
    55个提高你CSS开发效率的必备片段(转自:前段日刊)
  • 原文地址:https://www.cnblogs.com/ike_li/p/12916690.html
Copyright © 2020-2023  润新知