**
**
1.开源的计算机视觉库
2.(http://SourceForge.net/projects/opencvlibrary)
3.C/C++
4.Linux/Windows/Mac
5.接口:Python、Ruby、MATLAB
6.OpenCV运行会自动调用系统安装了的IPP库(多媒体函数库)
7.工厂产品检测、医学成像、信息安全、用户界面、摄像机标定、立体视觉和机器人。
8.还提供有MLL库(机器学习库)。
**
**
1.计算机视觉“看”到的只是一个数值矩阵。
2.视觉问题的病态本质:随着视点的变化,物体的二维外观会变化很大。
3.由人拍摄的图像中,具有相当多的隐含信息。
4.一般通过统计的方法来克服噪声。
5.计算机视觉拟根据摄像机数据来采取行动或者做出决策。
6.对计算机视觉应用环境的约束越多,则越能够使用这些约束来简化问题,从而使最终的解决方案越可靠。
7.OpenCV的目标是为解决计算机视觉问题提供基本工具。
OpenCV的起源:
1.1999诞生于Intel研究中心,促进CPU密集型应用。
2.从某种程度上说,在一家硬件公司里,在软件方面会有更多创新的空间。
OpenCV的结构和内容:
cv模块:图像处理和视觉算法
MLL:机器学习库、统计分类器
HighGUI:图像和视频的输入/输出
CXCore:基本的数据结构和相关函数
CVAux:即将淘汰的算法和函数,还有一些新出现的实验性的算法和函数(背景和前景分割)
practice:
1.下载并安装最新的OpenCV版本,然后分别在debug和release模式下编译OpenCV。
2.通过SVN下载OpenCV的最新代码,然后编译。
3.在三维信息转二维表示时,存在一些有歧义的描述,请描述至少三个歧义在描述,并提供克服这些问题的方法。
学习毛星云的《OpenCV编程入门》所做得一些读书笔记,希望初学者能够快速地查阅到OpenCV的一些图像基本操作的函数。
显示图像:
void showImage(const char* filename)
{
IplImage* img = cvLoadImage(filename);//将图像文件加载到内存。cvLoadImage()函数自动分配图像数据结构所需的内存,并可读取绝多大多数格式类型的图像文件。
cvNamedWindow("test1",CV_WINDOW_AUTOSIZE);
cvShowImage("test1",img);
cvWaitKey(0);
cvReleaseImage(&img);//img = NULL;
cvDestroyWindow("test1");//释放为该窗口分配的所有内存
}
void showImage2(const String& filename)
{
Mat srcImage = imread(filename);
imshow("test2",srcImage);
waitKey(0);
}
播放视频:
void playAVI1(const char* filename)
{
cvNamedWindow("avi",CV_WINDOW_AUTOSIZE);
CvCapture* capture = cvCreateFileCapture(filename); //此API已过期
IplImage* frame;
while(1)
{
frame = cvQueryFrame(capture);
if(!frame)
break;
cvShowImage("avi",frame);
char c = cvWaitKey(33);
if(c == 27) //如果用户触发了ESC键(ASCII 27),循环被退出。
break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("avi");
}
void playAVI2(const char* filename)
{
VideoCapture capture(filename);
while(1)
{
Mat frame;
capture >> frame;
if(frame.empty())
break;
imshow("avi",frame);
waitKey(30);
}
}
图像腐蚀:
用图像中的暗色部分“腐蚀”掉图像中的高亮部分(求局部的最小值,暗色部分逐渐增长)
void imageCorrosion(const char* filename)
{
Mat srcImage = imread(filename);
imshow("原图",srcImage);
//腐蚀操作
Mat element = getStructuringElement(MORPH_RECT,Size(15,15));
Mat dstImage;
erode(srcImage,dstImage,element); //腐蚀函数
imshow("效果图",dstImage);
waitKey(0);
}
图像模糊:
对图像进行均值滤波的处理
void imageBlur(const char* filename)
{
Mat srcImage = imread(filename);
imshow("【均值滤波】原图",srcImage);
Mat dstImage;
blur(srcImage, dstImage, Size(7,7));
imshow("【均值滤波】效果图",dstImage);
waitKey(0);
}
图像Canny边缘检测:
将载入的图像转成灰度图,再用blur函数进行图像模糊以降噪,然后用canny函数进行边缘检测。
void imageCanny(const char* filename)
{
Mat srcImage = imread(filename);
imshow("原图",srcImage);
Mat edge,grayImage;
//转灰度图像
cvtColor(srcImage,grayImage,CV_BGR2GRAY);
//降噪
blur(grayImage, edge, Size(3,3));
//Canny检测
Canny(edge, edge, 3, 9, 3);
imshow("效果图",edge);
}
调用摄像头:
void playCamera()
{
VideoCapture capture(0);
while(1)
{
Mat frame;
capture >> frame;
imshow("调用摄像头",frame);
waitKey(30);
}
}
调用摄像头并进行Canny检测
void playCamera2()
{
VideoCapture capture(0);
while(1)
{
Mat frame;
capture >> frame;
Mat edge, grayImage;
cvtColor(frame, grayImage,CV_BGR2GRAY);
blur(grayImage,edge,Size(7,7));
Canny(edge,edge,3,30,3);
imshow("摄像头处理",edge);
waitKey(30);
}
}