计算机视觉OpenCV的学习与探究
什么是计算机视觉与OpenCV?
计算机视觉
计算机视觉是一门研究如何使机器“看”的科学,指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。因为感知可以看作是从感官信号中提 取信息,所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中“感知”的科学。
OpenCV
开发源代码的计算机视觉类库OpenCV(Inter Open Source ComputerVision Library)由英特尔公司开发,它是一套可免费获得的由一些C函数和C++类所组成的库,用来实现一些常用的图像处理及计算机视觉算法。OpenCV主要用于对图像进行一些高级处理,比如说特征检测与追踪、运动分析、目标分割与识别以及3D重建等。
OpenCV是Inter公司开发的图像处理和计算机视觉函数库,它有以下几个特点:开发C源码,基于Inter处理器指令集开发的优化代码,统一的结构和功能定义,强大的图像和矩阵运算能力,方便灵活的用户接口,同时支持WINDOWS,LINUX平台等。
OpenCV能做什么?
- 内置数据结构和输入/输出(In-build data structures and input/output)
- 图像处理操作(Image processing operations)
- 构建图形用户界面(Build GUI)
- 视频分析(Video analysis)
- 3D重建(3D reconstruction)
- 特征提取(Feature extraction)
- 目标检测(Object detection)
- 机器学习(Machine learning)
- 计算摄影(Computational photography)
- 形状分析(Shape analysis)
- 光流算法(Optical flow algorithms)
- 人脸和目标识别(Face and object recognition)
- 表面匹配(Surface matching)
- 文本检测和识别(Text detection and recognition)
图像的取样
将图像写入文件,可使用 imwrite()函数,该函数的声明如下:
bool imwrite(const string& filename, InputArray image,const vector<int>& params=vector<int>())
下面例程展示了如何读入一副图像,然后对图像进行 Canny 边缘操作,最后
将结果保存到图像文件中。
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
//读入图像,并将之转为单通道图像
Mat im = imread("lena.jpg", 0);
//请一定检查是否成功读图
if( im.empty() )
{
cout << "Can not load image." << endl;
return -1;
}
//进行 Canny 操作,并将结果存于 result
Mat result;
Canny(im, result, 50, 150);
//保存结果
imwrite("lena-canny.png", result);
return 0;
}
将 lena.jpg 文件放在当前目录,运行该例程后,lena-canny.png 将会出现在当前目录。lena-canny.png 图像如图所示,是 lena.jpg 的边缘提取结果。
迭代器
迭代器可以方便地遍历所有元素。
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
Mat grayim(600, 800, CV_8UC1);
Mat colorim(600, 800, CV_8UC3);
//遍历所有像素,并设置像素值
MatIterator_<uchar> grayit, grayend;
for( grayit = grayim.begin<uchar>(), grayend = grayim.end<uchar>()