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



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值