【第一节OpenCV基础】

���Ľ�������л�����Ķ�

推荐书籍:【计算机视觉—算法与应用】

安装

==

免安装


打开VS,创建好项目后,使用VS2013或者VS2017里面的Tools–>Nuget Pakage Manager–>Manager NuGet pakages for solution直接搜索OpenCV安装即可。

手动安装


下载与配置

官网下载,解压,配置环境变量。 …opencv\build\x86\vc10\bin …opencv\build\x64\vc10\bin 上面是OpenCV里面的路径,把这个路径配置到path里。 x86表示你的应用是在32位平台下编译的,x64表示应用是64位的。和系统位数没有关系。一般是32位系统不能编译64位的程序。64位可以编译32位的程序。 上面只是告诉了系统我计算机中有OpenCV了。还需要在应用中配置对应的OpenCV。 VS工程“属性管理器”中添加 1、【通用属性】 ->【VC++目录】 ->【包含目录】 把下面这三个的全路径添加到include directory中。 …build\include …build\include\opencv …build\include\opencv2 2、【通用属性】 ->【VC++目录】 ->【库目录】 …opencv\build\x86\vc12\lib 3、【通用属性】 ->【链接器】->【输入】->【附加的依赖项】 opencv_nonfree2411d.lib opencv_nonfree2411.lib… opencv_ts300d.lib opencv_world300d.lib 这里注意下,opencv_world300d.lib与opencv_world300.lib的区别。带d表示是debug版本,能够调试;不带d表示release版本,不带调试功能。

插件

Image Watch

1、Image Watch 的下载与安装。 2、使用view –>other windows –>Image watch

程序模板

1
2
3
4
#include <iostream> 
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;

模块

1
2
3
4
Model
-----

Core-->opencv\_core.lib Imgproc -->opencv\_imgproc.lib Highgui-->opencv_highgui.lib

图像分类

二值图像 灰度图像 彩色图像 多种颜色空间

常用构造函数

1
2
3
4
5
6
7
8
9
10
Mat::Mat() 
Mat::Mat(int rows, int cols, int type)
Mat::Mat(Size size, int type)
Mat::Mat(int rows, int cols, int type, const Scalar& s)
Mat::Mat(Size size, int type, const Scalar& s)
Mat::Mat(const Mat& m)
Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP)
Mat::Mat(const Mat& m, const Range& rowRange, const Range& colRange)
Mat::Mat(const Mat& m, const Rect& roi)

Mat的赋值和拷贝问题

浅拷贝

lll

深拷贝

像素值的读写

方法1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
uchar value = grayim.at<uchar>(i,j); 
for( int i = 0; i < grayim.rows; ++i)
for( int j = 0; j < grayim.cols; ++j )
grayim.at<uchar>(i,j) = (i+j)%255;

for( int i = 0; i < colorim.rows; ++i)
for( int j = 0; j < colorim.cols; ++j )
{
Vec3b pixel;
pixel[0] = i%255; //Blue
pixel[1] = j%255; //Green
pixel[2] = 0; //Red
colorim.at<Vec3b>(i,j) = pixel;
}

方法2

1
2
3
4
5
6
7
8
9
10
11
cv::Mat Iterator_<uchar> grayit, grayend; 
for( grayit = grayim.begin<uchar>(), grayend =
grayim.end<uchar>(); grayit != grayend; ++grayit)
*grayit = rand()%255;
MatIterator_<Vec3b> colorit,colorend;
for(colorit = colorim.begin<Vec3b>(),colorend = colorim.end<Vec3b>();colorit != colorend;++colorit)
{
(*colorit)[0] = rand()%255;//蓝色blue
(*colorit)[1] = rand()%255;//绿色green
(*colorit)[2] = rand()%255;//红色red
}

方法3

1
2
3
4
5
6
7
8
9
for( int i = 0; i < grayim.rows; ++i) 
{
//获取第 i 行首像素指针
uchar * p = grayim.ptr<uchar>(i);
//对第 i 行的每个像素(byte)操作
for( int j = 0; j < grayim.cols; ++j )
p[j] = (i+j)%255;

}
0%