OpenCV学习笔记——《OpenCV3编程入门》读书笔记

这篇读书笔记,主要记录我阅读《OpenCV3编程入门》的读书笔记,作者毛星云写的这本书十分适合接触OpenCV的初学者,虽然理论性的内容是简要概括,但还是可以大致的理解。。此书最好的就是提供了大量的完整例子的代码,对初学者入门相当有帮助,建议各位OpenCV的初学者可以认真阅读一下这本书,会对OpenCV的编程有个一个整体的初步认识。OpenCV学习笔记    chap1 邂逅
摘要由CSDN通过智能技术生成

这篇读书笔记,主要记录我阅读《OpenCV3编程入门》的读书笔记,作者毛星云写的这本书十分适合接触OpenCV的初学者,虽然理论性的内容是简要概括,但还是可以大致的理解。。此书最好的就是提供了大量的完整例子的代码,对初学者入门相当有帮助,建议各位OpenCV的初学者可以认真阅读一下这本书,会对OpenCV的编程有个一个整体的初步认识。


OpenCV学习笔记

    chap1 邂逅OpenCV

1.using namespace cv;  //包含cv命名空间

2.Mat srcImage = ("1.jpg"); //载入图像

3.imshow("[原始图]",srcImage);//显示图像

4.waitKey(0);   //等待任意按键按下

5.waitKey(6000); //等待6000ms后窗口自动关闭

6.blur(srcImage,dstImage,Size(7,7)); //均值滤波操作

7. cvtColor(srcImage, grayImage, CV_BGR2GRAY ); //将原图像转换为灰度图像

8.读入视频

  法一:VideoCapturecapture("1.avi");

  法二:VideoCapturecapture; capture.open("1.avi");

9. 调用摄像头读入视频

  VideoCapture capture(0);

 

chap2. 启程前的认知准备

 

chap3. HighGUI图形用户界面初步

1.OpenCV中的C++类和函数都是定义在命名空间cv之内的,所以在代码开头  的位置加上using namespacecv; 这句代码。

2.Mat类是用于保存图像以及其他矩阵数据的数据结构,默认尺寸为0

3. 图像的载入:Matimread(const string& filename, int flags=1);第一个参数conststring& filename指的是载入图片的路径名;第二个参数int flags是载入标识符,指定一个夹在图像的类型,默认为1,flags>0返回3通道彩色图像,flags=0返回灰度图像,flags<0返回Alpha通道的加载图像。

4.图像的显示:imshow(conststring& winname, InputArray mat);第一个参数指的是要显示窗口标识名称;第二个参数填要显示的图像。

5. 创建窗口namedWindow

namedWindow(cosnt string& winname, int flags=WINDOW_AUTOSIZE);

第一个参数填写被用作窗口标识符的窗口名称;第二个参数窗口的标识,可以填如下几种值:WINDOW_NORMAL用户可以改变窗口的大小,WINDOW_AUTOSIZE设置这个值(为默认值),窗口大小会自动调整以适应所显示的图像,且用户没法手动改变窗口大小。

6. 输出图像到文件imwrite()函数

imwrite(cosntstring& filename, InputArray img, const vector<int>&params=vecror<int>() );

第一个参数,填需要的写入的文件名,要带上后缀,如“123.jpg”;第二个参数,一般填一个Mat类型的图像数据;第三个参数,表示特定格式保存的参数编码,默认值vecror<int>()

7.创建滑动条:creatTrackbar()函数

creatTrackbar( conststring& trackbarname, conststring& winname, int* value, intcount, TrackbarCallback onChange=0, void* userdata=0)

第一个参数,trackbarname,轨迹条的名字;

第二个参数,winname,窗口的名字,表示轨迹条依附到的窗口;

第三个参数,value,指向整形的指针,表示滑块的位置,创建时滑块的初始位置就是该变量当前的值;

第四个参数,count,表示滑块可以达到的最大位置的值;

第五个参数,onChange,指向回调函数的指针,滑块位置改变,这个函数都进行回调,且这个函数的原型必须为voidXXXX(int, void*),第一个参数是轨迹条的位置,第二个参数是用户数据。若回调是NULL指针,则表示没有回调函数的作用,仅第三个参数value有变化;

第六个参数,userdata,默认值0。

 

chap4. OpenCV数据结构与基本绘图

1.使用函数clone()或者copyTo() 来复制一幅图像的矩阵

Mat F= A.clone();       Mat G; A.copyTo(G)

2. 矩形的表示:Rect类

Rect类的成员有x,y,width,height,分别为左上角点的坐标和矩形的宽、高。

contains(Point)判断点是否在矩形内;

inside(Rect)判断矩形是否在该矩形内;

tl()返回左上角点坐标; br()返回右下角点坐标

3.颜色空间转换:cvtColor()函数

cvtColor(InputArraysrc, OutputArray dst, int code, int dstCn=0)

第一个参数,输入图像;

第二个参数,输出图像;

第三个参数,颜色空间转换的标识符;

第四个参数,目标图像的通道数,若为0,则表示其取源图像的通道数。

4. 创建空白的Mat图像

MatatomImage=Mat::zeros( 长, 宽, CV_8UC3 );

5.OpenCV默认的图片通道存储顺序是BGR,即蓝绿红,而不是RGB

 

chap5. core组件进阶

1. 按原始图的参数规格来创建创建效果图

MatsrcImage = imread("1.jpg");

Mat dstImage;

dstImage.create(srcImage.rows,srcImage.cols,srcImage.type());//效果图的大小、类型与原图片相同

2.计时函数 getTickCount()和getTickFrequency()

//记录起始时间

doubletime0 = static_cast<double>(getTickCount()); 

//计算运行时间并输出

time0= ((double)getTickCount() - time0)/getTickFrequency();

cout<<"\t此方法运行时间为:"<<time0<<"秒"<<endl;  //输出运行时间

3.Mat类的公有成员变量cols和rows给出了图像的宽和高

srcImage.rows

srcImage.cols

4.Mat类的成员函数channels()用于返回图像的通道数;

灰度图的通道数为1,彩色图的通道数为3.

5. Mat类提供ptr函数得到图像任意行的首地址

uchar*data = outputImage.ptr<uchar>(i); //获取第i行的首地址

6.访问图像中的像素P100-114

7. 感兴趣区域(ROI,regionof interest)

两种方法定义ROI:

第一种,用表示矩形区域的Rect,它指定矩形的左上角坐标和矩形的长宽

MatimageROI;

imageROI=image(Rect(500,250,logo.cols,logo.rows));

第二种,指定感兴趣行或者列的范围(Range),Range是指从起始索引到终止索引(不包括终止索引)的一连段连续序列。

imageROI=image(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols))

8. MatimageROI=image(Rect(500,250,logo.cols,logo.rows));

Matmask=imread("logo.jpg",0);//加载掩膜&

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值