最近对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;
}