OpenCV入门学习笔记(一)

**

什么是OpenCV:(关键词)

**
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);
    }
}

你可能感兴趣的:(OpenCV初学,C++,Qt)