实验环境
Windows操作系统、Visual Studio 2015、OpenCV 3.2.0
安装OpenCV
从官方网站下载OpenCV的最新版本,这次版本是3.2.0。
注:从Chrome下载会碰到下载的安装包不完整的情况,同时Chrome不支持断点续传,所以推荐用迅雷进行下载,下载方法:在Chrome下载目录中找到OpenCV的下载链接,打开迅雷新建任务即可。
Hello,OpenCV
使用OpenCV 3.2.0的配置过程
右键项目->属性,将配置改成所有配置,将平台改为所有平台;
在左侧目录栏中选择VC++目录,在右侧的包含目录下拉项中点选编辑,在弹出的窗口中添加三个工作路径:
opencv/build/include opencv/build/include/opencv opencv/build/include/opencv2
在库目录中,添加两个工作路径
opencv/build/x64/vc14 opencv/build/x64/vc14/lib
接下来,在左侧找到链接器->输入,在右侧的附件依赖项中添加需要链接到的OpenCV库(lib.)文件
注:在VS2015以及OpenCV3.2.0的条件下,只需要添加一个库文件opencv_world320d.lib即可之后即可以编译运行程序,不过需要将程序需要的动态链接库(.dll)放在和可执行程序(.exe)同一目录下,否则不能运行。
操作OpenCV数据
使用image.at<...>()访问图像中的像素
image.at<Vec3b>(i, j)
图像的通道数为4(png图像,RGBA,A为透明度)
遍历image的像素,将图片的白色部分修改为黑色
Vec3b black = { 0, 0, 0 };
Vec3b white = { 0xff, 0xff, 0xff };
for (int i = 0; i < image.rows; i++) {
for (int j = 0; j < image.cols; j++) {
if (image.at<Vec3b>(i, j) == white)
image.at<Vec3b>(i, j) = black;
}
}
}
图像的长和矩阵的行数是一样的,图像的宽乘以通道数就是矩阵的列数。
修改程序,将image反色
Mat reverse(image.size(), image.type(), Scalar(255, 255, 255));
image = reverse - image;
方法就是新建一个和image大小一样但是全白色的新矩阵,然后用新矩阵去减image得到反色的image
构造矩阵,并计算其逆矩阵
Mat Mat32(32, 32, CV_32FC1);
for (int i = 0; i < 32; i++) {
for (int j = 0; j < 32; j++) {
if (i == j)Mat32.at<float>(i, j) = 2;
else if (i - 1 == j || i + 1 == j)Mat32.at<float>(i, j) = -1;
else Mat32.at<float>(i, j) = 0;
}
}
Mat32 = Mat32.inv();
Mat result;
normalize(Mat32, result, 1.0, 0.0, CV_MINMAX);
normalize函数就是用来重新映射得到灰度图的方法。将最小值设为黑,最大值设为白。