OpenCV实践之路——MFC与OpenCV联合打开摄像头

在之前的一篇博客中已经记录了如何打开一张图片,能打开图片之后,自然就是尝试打开摄像头。在之前打开图片的时候已经知道了怎么应用按钮控件和图片控件,虽然都没记录。。。最最重要的是,知道了怎么让MFC与OpenCV的数据交互——Mat与CImage相互转换。有了之前的基础,打开摄像头就可以得心应手了。还是直接上代码,然后再说问题:

void CMFCtestDlg::OnBnClickedButton1()
{
	// TODO: Add your control notification handler code here
	VideoCapture cap;
	cap.open(0);
	Mat frame;

	CWnd *pWnd = GetDlgItem(IDC_STATIC);//获得pictrue控件窗口的句柄
	CDC *pDC = pWnd->GetDC();//获得pictrue控件的DC  

	while (1)
	{
		cap >> frame;
		//imshow("img", frame);
		waitKey(10);
		MatCImage mc;
		mc.MatToCImage(frame, image);

		GetClientRect(&dlg_rect);
		GetDlgItem(IDC_STATIC)->GetClientRect(&pic_rect);

		dlg_center = dlg_rect.CenterPoint();
		pic_rect.MoveToX(dlg_rect.Width() / 2 - image.GetWidth() / 2);
		pic_rect.MoveToY(dlg_rect.Height() / 2 - image.GetHeight() / 2);

		//pic_rect.right = pic_rect.left + image.GetWidth();
		//pic_rect.bottom = pic_rect.top + image.GetHeight();

		GetDlgItem(IDC_STATIC)->MoveWindow(pic_rect);

		image.Draw(pDC->m_hDC, CRect(0, 0, image.GetWidth(), image.GetHeight()));
	}
}

可以看到,这一次不像打开图片那样,最后的显示是在OnPaint()函数里面,而是直接写在了按钮的处理函数里面。

现在遇到的问题就是,好像所有的操作都要在这里进行,因为这里是一个while(1)无限循环,一直执行的就是这一段程序,其他代码根本不会执行。。。

效果图如下:

不过即使是这样现在还没遇到太多的问题,做个行人检测人脸识别什么的也够了。因为他们就是在循环中执行的。

后面的博客将会记录人脸识别相关内容,这次可不仅仅是人脸检测了,而是从视频中识别出自己。

时间: 2024-10-14 00:10:48

OpenCV实践之路——MFC与OpenCV联合打开摄像头的相关文章

OpenCV实践之路——人脸识别之一数据收集和预处理

本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51386949 微博:http://weibo.com/xingchenbing  前段时间对人脸检测和人脸标记进行了一些尝试:人脸检测(C++/Python)和用Dlib库进行人脸检测和人脸标记.但是检测和识别是不同的,检测解决的问题是图片中有没有人脸:而识别解决的问题是,如果一张图片中有人脸,这是谁的脸.人脸检测可以利用op

OpenCV实践之路——Python的安装和使用

本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/50936076 微博:http://weibo.com/xingchenbing  因为下一步要開始研究下深度学习.而深度学习领域非常多的算法和应用都是用Python来实现的,把Python转成C++代码耗时太多,不如直接学习下Python直接医用Python的代码. 搭建Python环境的过程是非常耗时的,可是如今回头来看又认

OpenCV实践之路——人脸检测(C++/Python) 【转】

转自:http://blog.csdn.net/xingchenbingbuyu/article/details/51105159 版权声明:本文为博主原创文章,转载请联系作者取得授权. 本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51105159 微博:http://weibo.com/xingchenbing  之前一直觉得人脸检测是非常麻烦的,即使是用OpenCV,麻

OpenCV实践之路——人脸检测(C++/Python)

之前一直觉得人脸检测是非常麻烦的,即使是用opencv,麻烦到我都不敢去碰.这两天仔细看了下,如果只是调用opencv自带的分类器和函数的话,简直是简单.这不,正好最近也在学习Python,索性就用C++和Python两种语言都实现一下.当然,我现在这个是最简单的版本. 步骤: 调用opencv训练好的分类器和自带的检测函数检测人脸人眼等的步骤简单直接: 1.加载分类器,当然分类器事先要放在工程目录中去.分类器本来的位置是在*\opencv\sources\data\haarcascades(h

【OpenCV2】MFC中用OPENCV如何将图片显示在指定位置?

在opencv在开发过程中,我想最频繁的操作(之一)莫过于显示图片了. 学过OpenCV的同学都知道,调用cv::imshow()(或者C版本的ShowImage())可以轻而易举的将图片显示出来. 但是,它会创建一个不这么协调的对话框来显示这个图片,那么在MFC中我们如何让图片显示在指定的位置上呢? 先给个结果图(我使用的是VS2010+OpenCV2.4.8): 第一步: 创建一个基于MFC的基本对话框框架了.配置OpenCV环境 第二步:(如果是使用2.2版本以下的跳过) 我们要使用一个非

双目标定与三维计算:从理论到OpenCV实践

双目标定与三维计算:从理论到OpenCV实践 一.双目立体成像主要步骤    2 二.三角测量    3 2.1 主光线在无穷远处相交    3 2.2 主光线在有限距离内相交    3 2.3 深度与视差    4 2.4 双目立体坐标系    5 2.5 实际情况的双目    5 三.对级几何    6 3.1 对极几何的定义    6 3.2 极点极线极面的定义    6 3.3 对极几何的一些结论    7 四.本征矩阵E和基础矩阵F    8 4.1 基本信息    8 4.2 两者区

opencv学习之路(2)、读取视频,读取摄像头

一.介绍 视频读取本质上就是读取图像,因为视频是由一帧一帧图像组成的.1秒24帧基本就能流畅的读取视频了. ①读取视频有两种方法: A. VideoCapture cap; cap.open("1.avi"); B. VideoCapture cap("1.avi"); ②循环显示每一帧: while(1) { Mat frame; //定义Mat变量,用来存储每一帧 cap>>frame; //读取当前帧方法一 //cap.read(frame); /

opencv学习之路(41)、人脸识别

一.人脸检测并采集个人图像 //take_photo.cpp #include<opencv2/opencv.hpp> using namespace cv; using namespace std; void take_photo() { VideoCapture cap(0); //打开摄像头 if (!cap.isOpened()) return; //加载级联检测器 CascadeClassifier cascade; cascade.load("F:/opencv3.2/R

opencvbase 实现opencv打开摄像头和初步处理等效果操作(附源码)

// TwoCameraOnTimer2Dlg.cpp : 实现文件 /* CvMat, Mat, IplImage之间的互相转换 IpIImage -> CvMat CvMat matheader; CvMat * mat = cvGetMat(img, &matheader); CvMat * mat = cvCreateMat(img->height, img->width, CV_64FC3); cvConvert(img, mat) IplImage -> Mat