OpenCV学习笔记1:使用Camera获取图像,并用Canny转换成边缘图,并支持鼠标点击保存图片

        最近对OpenCV产生了兴趣,然后下载OpenCV2.4.2,安装到了unbuntu和windows上,又看了很多相关的资料,比如学习opencv, opencv_tutorials(Opencv自带的)等等,也运行了里面自带的所有例子,然后发现里面的一些算法原理一点都不明白,不得已,又去找了一本计算机图形学.(美国)Peter.Shirley.清晰版来阅读,但还是半懂不懂,就决定从自己的初衷出发。

       我的初衷就是用OpenCV来识别人像,为了达到这个目的,现在开始写学习笔记,什么安装步骤这里就不写了,网上很多,基本的加载图片,转换图片也不写了,学习OpenCV里有例子,我这个例子就是使用摄像头获取图像,显示在一个窗口,然后将图像使用Canny算法获得边缘的图像,显示在另外一个窗口,主窗口支持鼠标点击,左键点击就将当前图像保存下来。

下面是源代码:

#include "cv.h"
#include "highgui.h"

class myCameraApp
{
public:
    myCameraApp()
    {
        mCapture.open(0);
        assert(mCapture.isOpened());
        cv::namedWindow("Camera");
        cv::namedWindow("Canny");
        cv::setMouseCallback("Camera", mouseCallBack, &mFrame);
    }

    void getCannyImage(cv::Mat src)
    {
        cv::Canny(src, mCannyImage, 50,150,3);
        cv::imshow("Canny", mCannyImage);
    }

    void run()
    {
        while (1)
        {
            mCapture >> mFrame;
            if (!mFrame.empty())
            {
                getCannyImage(mFrame);
                cv::imshow("Camera", mFrame);
            }
            int key = cv::waitKey(30);
            if (key == 27)
            {
                return;
            }
        }
    }

    static void mouseCallBack(int event, int x, int y, int flags, void* userdata)
    {
        switch (event)
        {
        case cv::EVENT_FLAG_LBUTTON:
            cv::imwrite("d:\\camera.jpg", *((cv::Mat*)userdata));
            break;
        }
    }
private:
    cv::VideoCapture mCapture;
    cv::Mat mFrame;
    cv::Mat mCannyImage;
};

int main(int argc, char** argv)
{
    myCameraApp camera;
    camera.run();;
    return 0;
}



你可能感兴趣的:(OpenCV)