2021.12
一、参考
参考《VS2017+OPENCV在MFC中显示摄像头》,但用法是老opencv的了,程序有多个问题,https://www.freesion.com/article/2345375894/
opencv在MFC中显示图像要用到它的CvvImage类,但在opencv2.3.1的版本中,已经找不到这个类了。参见https://blog.csdn.net/szlcw1/article/details/21296523
opencv是采用Mat,Mat和Cimage需要相互转换,Cimage能显示到picture控件中,也可以保存图片!参考《OpenCV的Mat与ATL/MFC的CImage相互转换》https://blog.csdn.net/liangjialang/article/details/33320093
这里图像显示到picture控件,采用DrawPicToHDC()。参考《opencv+MFC在不使用CvvImage的情况下显示图片》opencv+MFC在不使用CvvImage的情况下显示图片_XHL_CSDN_DOW的博客-CSDN博客
opencv已经是采用版本c++接口了,cvloadimage函数是改成imread了。参见https://tieba.baidu.com/p/6151866924
以及《Mat imread 与 IplImage cvLoadImage区别》https://blog.csdn.net/lovexinxin1991/article/details/44903161
《cv::Mat的介绍》https://blog.csdn.net/szlcw1/article/details/37576689
不要使用CvCapture, IplImage, cvQueryFrame了,使用cv::VideoCapture,cv::Mat等。参见《cvQueryFrame does not return cv::Mat?》please try to avoid CvCapture, IplImage, cvQueryFrame, et al. refactor your code instead, and use cv::VideoCapture and cv::Mat,https://stackoverflow.com/questions/31490779/cvqueryframe-does-not-return-cvmat
重点!参考《【OpenCV3】视频读写cv::VideoCapture和cv::VideoWriter》【OpenCV3】视频读写cv::VideoCapture和cv::VideoWriter_BBZZ2的专栏-CSDN博客
二、过程和程序
vcpkg安装opencv:
vcpkg install opencv:x86-windows
VS2017的VC建立对话框MFC。
项目属性“C/C++”中增加vcpkg的包含目录,比如:C:\VC_PROJ\vcpkg-master\installed\x86-windows\include
项目属性“链接器\输入\附加依赖项”中增加vcpkg生成的opencv的lib库,比如:
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_calib3d.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_core.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_dnn.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_features2d.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_flann.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_highgui.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_imgcodecs.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_imgproc.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_ml.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_objdetect.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_photo.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_stitching.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_video.lib
c:\VC_PROJ\vcpkg-master\installed\x86-windows\lib\opencv_videoio.lib
添加一个Picture Control控件,ID是IDC_STATIC。
添加3个按钮及函数。
添加定时器响应函数。
运行前,把各个.dll从C:\VC_PROJ\vcpkg-master\installed\x86-windows\bin拷过去,提示要什么就拷什么。就能正常运行了。大概是需要这些.dll:
jpeg62.dll
libpng16.dll
lzma.dll
opencv_core.dll
opencv_imgcodecs.dll
opencv_imgproc.dll
opencv_videoio.dll
tiff.dll
webp.dll
zlib1.dll
需要新添加的程序如下:(应该有一些新的函数方法可以用,不管了)
///文件头和全局变量
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/videoio/videoio_c.h>
using namespace cv;
//定义图片和视频显示用到的一些类
cv::VideoCapture cap;
Mat v_frame; //cvmat对象
Mat m_grabframe;
CImag