zoukankan      html  css  js  c++  java
  • OpenCV3编程入门笔记(1)图像载入、显示、保存、变换灰度图

    图像载入、显示、保存函数:

    1         图像载入函数:imread()   Mat imread(const string& filename, int flags=1);

        const string&类型的filename为载入图像的路径(绝对路径和相对路径)

        flags是int类型的变量,flags>0,返回一个3通道的彩色图像;

                                             flags = 0,返回灰度图像;

                                             flags < 0,返回包含Alpha通道的加载图像。

        flags默认值为1,可以省略对其赋值。

    例如:Mat srcImage = imread(‘1.jpg’);

    2   图像显示函数:imshow()  void imshow(const string& winname, InputArray mat);

             Const string&类型的winname为需要显示的窗口名称;

             InputArray类型的mat,填需要显示的图像。

             例如:imshow(‘图’,srcImage);

    3       Mat类型是用于保存图像以及其他矩阵数据的数据结构,默认尺寸为0,也可以初始化尺寸。InputArray/outputArray在opnecv中和Mat类似都是一种数据格式,而很多时候,遇到函数原型中的InputArray/outputArray类型,可以把它简单的当做Mat类型。

    4       输出图像到文件:imwrite()  bool imwrite(const string& filename,InputArray img, const vector<int> & params=vector<int> () );

             const string& filename表示填写需要的文件名,需带上后缀,如“1.jpg”;

             InputArray img表示要保存的图像数据;

             const vector<int> & 类型的params,其默认值为vector<int> (),需要填写时有:

             1.JPEG格式图片,参数为0-100,表示图像质量,默认为95;

             2.PNG格式图片,参数为0-9,表示压缩级别,高值则表示更小尺寸和压缩时间更长;

             3.PPM,PGM,PBM格式时,表示二进制格式标志,参数0或1,默认为1。

             例如:imwrite(‘123.jpg’,dstImage);

    基础图像容器Mat

    5       使用Mat() 构造函数

             Mat M(2,2,CV_8UC3,Scalar(0,0,255));表示创建2行2列,CV_8UC3表示使用8位的unsigned char型,每个像素由三个元素组成的三通道。另外,Scalar是个short型的向量,能使用指定的定制化来初始化矩阵,还可以表示颜色。

    常用数据结构和函数

    6       点表示:Point 

        用法:Point point;

                        point.x = 10;

                        point.y = 8;

                或者:Point point = point(10,8); 都表示为有x=10和y=8定位的2D点。

    7       颜色的表示:Scalar

             Scalar(a,b,c) 表示定义的RGB值为:红色分量为c,绿色分量为b,蓝色分量为a。这里取决于opnecv和matlab不同储存三通道颜色方式,matlab为RGB顺序,opnecv为BGR,也可以理解为两者相反。

    8       矩形表示:Rect

             Rect类的成员变量有x,y,width,height表示左上角点的坐标和矩形宽和高。其成员函数有:

             Size()返回值为Size(尺寸大小),area()返回矩形的面积,contains(Point)判断点是否在矩形内,inside(Rect)判断矩形是否在该矩形内,tl()返回左上角点坐标,br()返回右下角点坐标。

             Rect rect = rect1 & rect2; 两矩形交集

             Rect rect = rect1 | tect2; 两矩形并集

             Rect rectShift = rect + point; 矩形平移

             Rect rectScale = rect + size; 矩形缩放

    9       颜色空间转换:cvtColor()

             其中RGB和Gray转换有:Opnecv2版本的CV_RGB2GRAY,CV_GRAY2RGB

                                             Opencv3版本的COLOR_RGB2GRAY,COLOR_GRAY2RGB

             RGB和HSV转换有:Opnecv2版本的CV_RGB2HSV,CV_BGR2HSV,CV_HSV2RGB,CV_HSV2BGR

                                     Opencv3版本的COLOR_RGB2HSV,COLOR_BGR2HSV,COLOR_HSV2RGB,COLOR_HSV2BGR

             即对于颜色转换,Opnecv2的CV_前缀的宏命名规范被Opnecv3中的COLOR_式的宏命名前缀所取代,另外,Opnecv中默认的图片通道存储顺序是BGR。

    10     综合例子:

             #include <opnecv2/opencv.hpp>

             using namespace cv;

             int main()

        {

                       Mat srcImage = imread(“1.jpg”);

                       Mat dstImage;

                cvtColor(srcImage,dstImage, COLOR_BGR2GRAY);

           imwrite(“图1.jpg”,srcImage);

                       imshow(“原图”,srcImage);

                       imshow(“变换图”,dstImage);

                      waitKey(0);

           return 0;

        }

  • 相关阅读:
    动态网络社团检测学习笔记 --- 随机块模型小结之简介
    十五组第四次作业
    17现代软件工程十五组第二次作业
    17现代软件工程十五组第三次作业
    现代软件工程2017十五组成员介绍
    软件测试学习日志3 ————软件测试作业之控制流图
    软件测试学习日志———— round 2 Junit+intellj idea 安装及简单的测试使用
    软件测试学习日志————round 1 some questions of two small programs
    [关于printPrime是()方法的控制流图和点覆盖、边覆盖、主路径覆盖]
    【在myeclipse中使用Junit(4.12), Hamcrest(1.3) 和Eclemma】
  • 原文地址:https://www.cnblogs.com/ggYYa/p/5655819.html
Copyright © 2011-2022 走看看