精华内容
下载资源
问答
  • MFC OpenCV 显示图像,VS2013 写的,不用添加CvvImage类,用的是VS2013 + OPENCV2.4.9 , 其他版本类似,界面能显示打开图片的路径,同时有灰度直方图均衡化和中值滤波的代码,网上其他程序要不是用vc6.0写,太老了,...
  • 使用MFC C++ OpenCV 做的图像处理界面,自己要配置好OpenCV 开发环境 ,自己测试全通过
  • 人脸检测 MFC openCV vc++源程序

    热门讨论 2011-01-22 15:00:45
    人脸检测 应用opencv 实现人脸检测,打开一幅图片,进行检测; 保证你的VC 是6.0版本,并且配置了openCV1.0版。 MFC openCV vc++源程序
  • 基于MFC OpenCV条码识别

    2018-09-14 17:09:38
    基于MFC机器视觉OpenCV条码识别系统,采用Zbar开源条码识别库实现条码识别。
  • MFC OpenCV DirectShow 显示两个usb摄像机

    热门讨论 2010-08-28 10:21:27
    MFC OpenCV DirectShow 显示两个usb摄像机,视频直接显示在Picture控件里,不会有OpenCV的窗口。
  • MFC opencv 显示图片

    2014-12-01 16:30:59
    基于C++的MFC 利用opencv 实现图片的显示。程序使用VS2010编写
  • mfcopencv显示图像

    2014-05-11 17:01:54
    mfc+opencv在vc++6.0实现编程,将opencv中的函数写入MFC
  • 光剑程序 vc源码 使用了mfc opencv gdi+
  • 采用MFCOpenCV Mat读取任意路径的图像并在界面上显示图像。
  • 结合opencv库和MFC框架开发了人脸识别系统,可以实时捕捉到人脸的位置,并用光流法判断人脸的走向
  • MFC OpenCV:鼠标滚轮缩放图片

    千次阅读 2019-05-14 17:03:27
      前置文章:MFC显示OpenCV图片的三种详细方法   在利用OpenCV嵌套MFC窗口显示图片后,希望通过鼠标滚轮函数缩放图片。 实现步骤 1、新建MFC应用程序。 2、配置OpenCV运行环境。 3、添加MFC的Pictrue Control...

    MFC OpenCV:鼠标滚轮缩放图片


    一、背景

      前置文章:MFC显示OpenCV图片的三种详细方法
      在利用OpenCV嵌套MFC窗口显示图片后,希望通过鼠标滚轮函数缩放图片。

    二、实现步骤

    1、新建MFC应用程序。
    在这里插入图片描述
    2、配置OpenCV运行环境。
    在这里插入图片描述
    3、添加MFC的Pictrue Control控件
    在这里插入图片描述
    4、编写代码。只需修改MFCApplication1Dlg.cpp文件。
    在这里插入图片描述
    添加的代码:

    //在MFCApplication1Dlg.cpp添加库文件
    #include "opencv2/opencv.hpp"
    using namespace cv;
    
    //在MFCApplication1Dlg.cpp添加全局变量
    double g_iZoom = 1;//初始缩放值
    double g_iRadio = 0.1;//缩放步距
    Mat g_matOriginal;//原始图片
    
    //在MFCApplication1Dlg.cpp的CMFCApplication1Dlg::OnInitDialog()函数中添加如下代码:
        namedWindow("ImageShow");//创建OpenCV窗口
    	HWND hWnd = (HWND)cvGetWindowHandle("ImageShow");//嵌套opencv窗口
    	HWND hParent = ::GetParent(hWnd);
    	::SetParent(hWnd, GetDlgItem(IDC_STATIC)->m_hWnd);
    	::ShowWindow(hParent, SW_HIDE);
    	g_iZoom = 1;//初始缩放值为1,表示原图
    	g_matOriginal = imread("E:\\vs\\image\\11.png");//opencv读取图片
    	imshow("ImageShow", g_matOriginal);//opencv显示图片
    	waitKey(1);
    

    5、初步运行结果。到此可以简单显示图片。
    在这里插入图片描述
    6、右键MFC的Pictrue Control控件,添加MFC的鼠标滚轮函数。
    在这里插入图片描述
    在这里插入图片描述

    BOOL CMFCApplication1Dlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
    {
    	// TODO: 在此添加消息处理程序代码和/或调用默认值
    	CRect rect;
    	GetDlgItem(IDC_STATIC)->GetWindowRect(&rect);//获取MFC图像显示区域
    	Point p(pt.x, pt.y);//opencv鼠标坐标
    	Rect r(rect.left, rect.top, rect.right, rect.bottom);//opencv窗口显示区域
    	if (r.contains(p)) //鼠标放在图片窗口上
    	{
    		int w = g_matOriginal.cols, h =g_matOriginal.rows;//原图宽高
    		Mat mat;
    		if (zDelta > 0)//放大图片
    		{
    			double zoom = g_iZoom + g_iRadio;
    			if (w * zoom * h * zoom < 3000 * 3000)//图片宽高<3000*3000时缩放值才会变大
    			{
    				g_iZoom = zoom;
    			}
    			resize(g_matOriginal, mat, Size(), g_iZoom, g_iZoom, INTER_LINEAR); //按比例放大图片
    		}
    		else if (zDelta < 0)//缩小图片
    		{
    			double zoom = g_iZoom - g_iRadio;
    			if (w * zoom * h * zoom > 100 * 100)//图片宽高>100*100时缩放值才会变小
    			{
    				g_iZoom = zoom;
    			}
    			resize(g_matOriginal, mat, Size(), g_iZoom, g_iZoom, INTER_AREA); //按比例缩小图片
    		}
    		imshow("ImageShow", mat);//显示缩放后图片
    		waitKey(1);
    	}
    	return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
    }
    

    7、缩放图片结果
    缩小图片
    放大图片

    三、全部代码

    MFCApplication1Dlg.h

    
    // MFCApplication1Dlg.h: 头文件
    //
    
    #pragma once
    
    
    // CMFCApplication1Dlg 对话框
    class CMFCApplication1Dlg : public CDialogEx
    {
    // 构造
    public:
    	CMFCApplication1Dlg(CWnd* pParent = nullptr);	// 标准构造函数
    
    // 对话框数据
    #ifdef AFX_DESIGN_TIME
    	enum { IDD = IDD_MFCAPPLICATION1_DIALOG };
    #endif
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持
    
    
    // 实现
    protected:
    	HICON m_hIcon;
    
    	// 生成的消息映射函数
    	virtual BOOL OnInitDialog();
    	afx_msg void OnPaint();
    	afx_msg HCURSOR OnQueryDragIcon();
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
    };
    
    

    MFCApplication1Dlg.cpp

    
    // MFCApplication1Dlg.cpp: 实现文件
    //
    
    #include "stdafx.h"
    #include "MFCApplication1.h"
    #include "MFCApplication1Dlg.h"
    #include "afxdialogex.h"
    
    #include "opencv2/opencv.hpp"
    using namespace cv;
    
    double g_iZoom = 1;//初始缩放值
    double g_iRadio = 0.1;//缩放步距
    Mat g_matOriginal;//原始图片
    //void OpenCVMouse(int event, int x, int y, int flags, void* param);
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // CMFCApplication1Dlg 对话框
    
    
    
    CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=nullptr*/)
    	: CDialogEx(IDD_MFCAPPLICATION1_DIALOG, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	ON_WM_MOUSEWHEEL()
    END_MESSAGE_MAP()
    
    
    // CMFCApplication1Dlg 消息处理程序
    
    BOOL CMFCApplication1Dlg::OnInitDialog()
    {
    	CDialogEx::OnInitDialog();
    
    	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    	//  执行此操作
    	SetIcon(m_hIcon, TRUE);			// 设置大图标
    	SetIcon(m_hIcon, FALSE);		// 设置小图标
    
    	namedWindow("ImageShow");//创建OpenCV窗口
    	HWND hWnd = (HWND)cvGetWindowHandle("ImageShow");//嵌套opencv窗口
    	HWND hParent = ::GetParent(hWnd);
    	::SetParent(hWnd, GetDlgItem(IDC_STATIC)->m_hWnd);
    	::ShowWindow(hParent, SW_HIDE);
    
    	g_iZoom = 1;//初始缩放值为1,表示原图
    	//setMouseCallback("ImageShow", OpenCVMouse, NULL); // 鼠标事件
    	g_matOriginal = imread("E:\\vs\\image\\11.png");//opencv读取图片
    	imshow("ImageShow", g_matOriginal);//opencv显示图片
    	waitKey(1);
    	
    
    	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    // 如果向对话框添加最小化按钮,则需要下面的代码
    //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
    //  这将由框架自动完成。
    
    void CMFCApplication1Dlg::OnPaint()
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // 用于绘制的设备上下文
    
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    		// 使图标在工作区矩形中居中
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// 绘制图标
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialogEx::OnPaint();
    	}
    }
    
    //当用户拖动最小化窗口时系统调用此函数取得光标
    //显示。
    HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>(m_hIcon);
    }
    
    
    BOOL CMFCApplication1Dlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
    {
    	// TODO: 在此添加消息处理程序代码和/或调用默认值
    	CRect rect;
    	GetDlgItem(IDC_STATIC)->GetWindowRect(&rect);//获取MFC图像显示区域
    	Point p(pt.x, pt.y);//opencv鼠标坐标
    	Rect r(rect.left, rect.top, rect.right, rect.bottom);//opencv窗口显示区域
    	if (r.contains(p)) //鼠标放在图片窗口上
    	{
    		int w = g_matOriginal.cols, h =g_matOriginal.rows;//原图宽高
    		Mat mat;
    		if (zDelta > 0)//放大图片
    		{
    			double zoom = g_iZoom + g_iRadio;
    			if (w * zoom * h * zoom < 3000 * 3000)//图片宽高<3000*3000时缩放值才会变大
    			{
    				g_iZoom = zoom;
    			}
    			resize(g_matOriginal, mat, Size(), g_iZoom, g_iZoom, INTER_LINEAR); //按比例放大图片
    		}
    		else if (zDelta < 0)//缩小图片
    		{
    			double zoom = g_iZoom - g_iRadio;
    			if (w * zoom * h * zoom > 100 * 100)//图片宽高>100*100时缩放值才会变小
    			{
    				g_iZoom = zoom;
    			}
    			resize(g_matOriginal, mat, Size(), g_iZoom, g_iZoom, INTER_AREA); //按比例缩小图片
    		}
    		imshow("ImageShow", mat);//显示缩放后图片
    		waitKey(1);
    	}
    
    	return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
    }
    
    
    //void OpenCVMouse(int event, int x, int y, int flags, void* param)//opencv滚轮函数
    //{
    //	if (event == EVENT_MOUSEWHEEL)//鼠标滚轮函数
    //	{
    //		TRACE("EVENT_MOUSEWHEEL\n");
    //	}
    //	if (event == EVENT_LBUTTONDOWN)
    //	{
    //		TRACE("EVENT_LBUTTONDOWN\n");//鼠标左键点击函数
    //	}
    //}
    
    
    
    

    四、注意

      Opencv窗口嵌套入MFC后,其鼠标按键函数有效,但其鼠标滚轮函数无效,只能使用MFC自身的鼠标滚轮函数。
    在这里插入图片描述
      如上图所示,当鼠标左键按下时输出栏显示如下内容:
      atlTraceGeneral - EVENT_LBUTTONDOWN
      atlTraceGeneral - EVENT_LBUTTONDOWN
      atlTraceGeneral - EVENT_LBUTTONDOWN
      而当鼠标滚轮前后滚动时并未出现:
      atlTraceGeneral - EVENT_MOUSEWHEEL
      如此说明opencv的鼠标滚轮函数无效。

    展开全文
  • MFC OpenCV:显示图片的3种方法(详细)

    万次阅读 多人点赞 2019-05-08 10:50:43
      由于OpenCV常用的界面只是单纯的打开图像窗口,相关界面控件和工具较少且不美观,故使用MFC制作界面,而用OpenCV单纯做图像处理。此时便需要在MFC中显示OpenCV所用的图片。 方法 1、嵌套。直接将OpenCV窗口嵌套...


    一、背景

      由于OpenCV常用的界面只是单纯的打开图像窗口,相关界面控件和工具较少且不美观,故使用MFC制作界面,而用OpenCV单纯做图像处理。此时便需要在MFC中显示OpenCV所用的图片。

    二、方法

    1、嵌套。直接将OpenCV窗口嵌套到MFC的Pictrue Control控件中。此方法既能直接显示图片,也可直接使用OpenCV的鼠标按键事件,但对于鼠标滚轮事件只能使用MFC本地的滚轮函数。
    2、转换。将OpenCV读取或处理的图片转换格式,使之成为MFC的Pictrue Control控件可显示的图片格式。此方法每刷新一次图片便需要转换格式一次,比较麻烦,且只能使用MFC的鼠标事件。
    3、保存。将OpenCV读取或处理的图片保存为本地图片,然后用MFC读取图片的方法读取并显示。此方法是笨方法,在特定情况下使用,保存和读取图片比较耗时,但无需转换格式,同样只能使用MFC的鼠标事件。

    三、实现

    3.1 嵌套OpenCV窗口显示图片

    1、新建MFC应用程序。
    在这里插入图片描述
    2、配置OpenCV运行环境。
    在这里插入图片描述
    3、添加MFC的Pictrue Control控件
    在这里插入图片描述
    4、编写代码。只需修改MFCApplication1Dlg.cpp文件。
    在这里插入图片描述
    添加的代码:

    //在MFCApplication1Dlg.cpp添加库文件
    #include "opencv2/opencv.hpp"
    using namespace cv;
    
    //在MFCApplication1Dlg.cpp的CMFCApplication1Dlg::OnInitDialog()函数中添加如下代码:
    
    // TODO: 在此添加额外的初始化代码
    	namedWindow("ImageShow");//创建OpenCV窗口
    	HWND hWnd = (HWND)cvGetWindowHandle("ImageShow");//嵌套opencv窗口
    	HWND hParent = ::GetParent(hWnd);
    	::SetParent(hWnd, GetDlgItem(IDC_STATIC)->m_hWnd);
    	::ShowWindow(hParent, SW_HIDE);
    	Mat mat = imread("E:\\vs\\image\\11.png");//opencv读取图片
    	imshow("ImageShow", mat);//opencv显示图片
    	waitKey(1);
    
    

    全部代码:

    // MFCApplication1Dlg.cpp: 实现文件
    //
    
    #include "stdafx.h"
    #include "MFCApplication1.h"
    #include "MFCApplication1Dlg.h"
    #include "afxdialogex.h"
    
    #include "opencv2/opencv.hpp"
    using namespace cv;
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
    
    class CAboutDlg : public CDialogEx
    {
    public:
    	CAboutDlg();
    
    // 对话框数据
    #ifdef AFX_DESIGN_TIME
    	enum { IDD = IDD_ABOUTBOX };
    #endif
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    
    // 实现
    protected:
    	DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    
    // CMFCApplication1Dlg 对话框
    
    
    
    CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=nullptr*/)
    	: CDialogEx(IDD_MFCAPPLICATION1_DIALOG, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    END_MESSAGE_MAP()
    
    
    // CMFCApplication1Dlg 消息处理程序
    
    BOOL CMFCApplication1Dlg::OnInitDialog()
    {
    	CDialogEx::OnInitDialog();
    
    	// 将“关于...”菜单项添加到系统菜单中。
    
    	// IDM_ABOUTBOX 必须在系统命令范围内。
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != nullptr)
    	{
    		BOOL bNameValid;
    		CString strAboutMenu;
    		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
    		ASSERT(bNameValid);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    	//  执行此操作
    	SetIcon(m_hIcon, TRUE);			// 设置大图标
    	SetIcon(m_hIcon, FALSE);		// 设置小图标
    
    	// TODO: 在此添加额外的初始化代码
    	namedWindow("ImageShow");//创建OpenCV窗口
    	HWND hWnd = (HWND)cvGetWindowHandle("ImageShow");//嵌套opencv窗口
    	HWND hParent = ::GetParent(hWnd);
    	::SetParent(hWnd, GetDlgItem(IDC_STATIC)->m_hWnd);
    	::ShowWindow(hParent, SW_HIDE);
    	Mat mat = imread("E:\\vs\\image\\11.png");//opencv读取图片
    	imshow("ImageShow", mat);//opencv显示图片
    	waitKey(1);
    
    	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    void CMFCApplication1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    	{
    		CAboutDlg dlgAbout;
    		dlgAbout.DoModal();
    	}
    	else
    	{
    		CDialogEx::OnSysCommand(nID, lParam);
    	}
    }
    
    // 如果向对话框添加最小化按钮,则需要下面的代码
    //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
    //  这将由框架自动完成。
    
    void CMFCApplication1Dlg::OnPaint()
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // 用于绘制的设备上下文
    
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    		// 使图标在工作区矩形中居中
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// 绘制图标
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialogEx::OnPaint();
    	}
    }
    
    //当用户拖动最小化窗口时系统调用此函数取得光标
    //显示。
    HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>(m_hIcon);
    }
    

    5、运行结果
    在这里插入图片描述

    3.2 转换格式显示OpenCV图片

    1、新建MFC应用程序(同上)
    2、配置OpenCV环境(同上)
    3、添加Pictrue Control控件(同上)
    4、编写程序
    添加的代码:

    //在MFCApplication2Dlg.h添加库文件及函数声明
    #include "opencv2/opencv.hpp"
    using namespace cv;
    void MatToCImage(Mat &mat, CImage &cImage);
    
    //在MFCApplication2Dlg.cpp最后添加函数定义:
    void MatToCImage(Mat &mat, CImage &cImage)
    {
    	//create new CImage  
    	int width = mat.cols;
    	int height = mat.rows;
    	int channels = mat.channels();
    
    	cImage.Destroy(); //clear  
    	cImage.Create(width, height, 8 * channels); //默认图像像素单通道占用1个字节  
    
    	//copy values  
    	uchar* ps;
    	uchar* pimg = (uchar*)cImage.GetBits(); //A pointer to the bitmap buffer  
    	int step = cImage.GetPitch();
    
    	for (int i = 0; i < height; ++i)
    	{
    		ps = (mat.ptr<uchar>(i));
    		for (int j = 0; j < width; ++j)
    		{
    			if (channels == 1) //gray  
    			{
    				*(pimg + i * step + j) = ps[j];
    			}
    			else if (channels == 3) //color  
    			{
    				for (int k = 0; k < 3; ++k)
    				{
    					*(pimg + i * step + j * 3 + k) = ps[j * 3 + k];
    				}
    			}
    		}
    	}
    }
    
    //在CMFCApplication2Dlg::OnPaint()画出图片:
        UpdateWindow();//刷新窗口
    	Mat mat = imread("E:\\vs\\image\\11.png");//opencv读取图片
    	//resize(mImage, mImage, Size(), 0.3, 0.3);
    	CRect rect;//定义矩形类  
    	CWnd *pWnd = GetDlgItem(IDC_STATIC);//获取控件句柄  
    	pWnd->GetClientRect(&rect);	//获取句柄指向控件区域的大小  
    	CDC *pDc = pWnd->GetDC();//获取picture的DC  
    	int win_w = rect.Width(), win_h = rect.Height();//获取窗口宽高
    	int img_w = mat.cols, img_h = mat.rows;//获取图片宽高
    	CImage ImageCam;
    	MatToCImage(mat, ImageCam);//转换图片格式
    	pDc->SetStretchBltMode(COLORONCOLOR);
    	ImageCam.Draw(pDc->m_hDC, 0, 0, win_w, win_h, 0, 0, win_w, win_h);//画出图片
    	ReleaseDC(pDc);
    

    MFCApplication2Dlg.h全部代码:

    
    // MFCApplication2Dlg.h: 头文件
    //
    
    #pragma once
    #include "opencv2/opencv.hpp"
    using namespace cv;
    
    
    // CMFCApplication2Dlg 对话框
    class CMFCApplication2Dlg : public CDialogEx
    {
    // 构造
    public:
    	CMFCApplication2Dlg(CWnd* pParent = nullptr);	// 标准构造函数
    
    // 对话框数据
    #ifdef AFX_DESIGN_TIME
    	enum { IDD = IDD_MFCAPPLICATION2_DIALOG };
    #endif
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持
    
    
    // 实现
    protected:
    	HICON m_hIcon;
    
    	// 生成的消息映射函数
    	virtual BOOL OnInitDialog();
    	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    	afx_msg void OnPaint();
    	afx_msg HCURSOR OnQueryDragIcon();
    	DECLARE_MESSAGE_MAP()
    };
    
    void MatToCImage(Mat &mat, CImage &cImage);
    
    

    MFCApplication2Dlg.cpp全部代码:

    
    // MFCApplication2Dlg.cpp: 实现文件
    //
    
    #include "stdafx.h"
    #include "MFCApplication2.h"
    #include "MFCApplication2Dlg.h"
    #include "afxdialogex.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
    
    class CAboutDlg : public CDialogEx
    {
    public:
    	CAboutDlg();
    
    // 对话框数据
    #ifdef AFX_DESIGN_TIME
    	enum { IDD = IDD_ABOUTBOX };
    #endif
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    
    // 实现
    protected:
    	DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    
    // CMFCApplication2Dlg 对话框
    
    
    
    CMFCApplication2Dlg::CMFCApplication2Dlg(CWnd* pParent /*=nullptr*/)
    	: CDialogEx(IDD_MFCAPPLICATION2_DIALOG, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CMFCApplication2Dlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    END_MESSAGE_MAP()
    
    
    // CMFCApplication2Dlg 消息处理程序
    
    BOOL CMFCApplication2Dlg::OnInitDialog()
    {
    	CDialogEx::OnInitDialog();
    
    	// 将“关于...”菜单项添加到系统菜单中。
    
    	// IDM_ABOUTBOX 必须在系统命令范围内。
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != nullptr)
    	{
    		BOOL bNameValid;
    		CString strAboutMenu;
    		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
    		ASSERT(bNameValid);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    	//  执行此操作
    	SetIcon(m_hIcon, TRUE);			// 设置大图标
    	SetIcon(m_hIcon, FALSE);		// 设置小图标
    
    	// TODO: 在此添加额外的初始化代码
    
    	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    void CMFCApplication2Dlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    	{
    		CAboutDlg dlgAbout;
    		dlgAbout.DoModal();
    	}
    	else
    	{
    		CDialogEx::OnSysCommand(nID, lParam);
    	}
    }
    
    // 如果向对话框添加最小化按钮,则需要下面的代码
    //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
    //  这将由框架自动完成。
    
    void CMFCApplication2Dlg::OnPaint()
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // 用于绘制的设备上下文
    
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    		// 使图标在工作区矩形中居中
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// 绘制图标
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialogEx::OnPaint();
    	}
    
    	UpdateWindow();//刷新窗口
    	Mat mat = imread("E:\\vs\\image\\11.png");//opencv读取图片
    	//resize(mImage, mImage, Size(), 0.3, 0.3);
    	CRect rect;//定义矩形类  
    	CWnd *pWnd = GetDlgItem(IDC_STATIC);//获取控件句柄  
    	pWnd->GetClientRect(&rect);	//获取句柄指向控件区域的大小  
    	CDC *pDc = pWnd->GetDC();//获取picture的DC  
    	int win_w = rect.Width(), win_h = rect.Height();//获取窗口宽高
    	int img_w = mat.cols, img_h = mat.rows;//获取图片宽高
    	CImage ImageCam;
    	MatToCImage(mat, ImageCam);//转换图片格式
    	pDc->SetStretchBltMode(COLORONCOLOR);
    	ImageCam.Draw(pDc->m_hDC, 0, 0, win_w, win_h, 0, 0, win_w, win_h);//画出图片
    	ReleaseDC(pDc);
    }
    
    //当用户拖动最小化窗口时系统调用此函数取得光标
    //显示。
    HCURSOR CMFCApplication2Dlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>(m_hIcon);
    }
    
    
    void MatToCImage(Mat &mat, CImage &cImage)
    {
    	//create new CImage  
    	int width = mat.cols;
    	int height = mat.rows;
    	int channels = mat.channels();
    
    	cImage.Destroy(); //clear  
    	cImage.Create(width, height, 8 * channels); //默认图像像素单通道占用1个字节  
    
    	//copy values  
    	uchar* ps;
    	uchar* pimg = (uchar*)cImage.GetBits(); //A pointer to the bitmap buffer  
    	int step = cImage.GetPitch();
    
    	for (int i = 0; i < height; ++i)
    	{
    		ps = (mat.ptr<uchar>(i));
    		for (int j = 0; j < width; ++j)
    		{
    			if (channels == 1) //gray  
    			{
    				*(pimg + i * step + j) = ps[j];
    			}
    			else if (channels == 3) //color  
    			{
    				for (int k = 0; k < 3; ++k)
    				{
    					*(pimg + i * step + j * 3 + k) = ps[j * 3 + k];
    				}
    			}
    		}
    	}
    }
    
    

    5、运行结果
    在这里插入图片描述

    3.3 OpenCV图片保存后显示

    1、新建MFC应用程序(同上)
    2、配置OpenCV环境(同上)
    3、添加Pictrue Control控件(同上)
    4、编写程序
    添加的代码:

    //在CMFCApplication2Dlg添加库文件:
    #include "opencv2/opencv.hpp"
    using namespace cv;
    
    //在CMFCApplication2Dlg::OnPaint()画出图片:
        Mat mat = imread("E:\\vs\\image\\11.png");//opencv读取图片
    	imwrite("E:\\vs\\image\\11_new.png", mat);//保存opencv图片
    
    	CImage img;
    	img.Load(L"E:\\vs\\image\\11_new.png");//mfc读取图片
    	int img_w = img.GetWidth(), img_h = img.GetHeight();//获取图片宽高
    
    	UpdateWindow();//刷新窗口
    	CRect rect;//定义矩形类  
    	CWnd *pWnd = GetDlgItem(IDC_STATIC);//获取控件句柄  
    	pWnd->GetClientRect(&rect);	//获取句柄指向控件区域的大小  
    	CDC *pDc = pWnd->GetDC();//获取picture的DC  
    	int win_w = rect.Width(), win_h = rect.Height();//获取窗口宽高
    	pDc->SetStretchBltMode(COLORONCOLOR);
    	img.Draw(pDc->m_hDC, 0, 0, win_w, win_h, 0, 0, win_w, win_h);//画出图片
    	ReleaseDC(pDc);
    

    全部代码:

    // MFCApplication3Dlg.cpp: 实现文件
    //
    
    #include "stdafx.h"
    #include "MFCApplication3.h"
    #include "MFCApplication3Dlg.h"
    #include "afxdialogex.h"
    
    #include "opencv2/opencv.hpp"
    using namespace cv;
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
    
    class CAboutDlg : public CDialogEx
    {
    public:
    	CAboutDlg();
    
    // 对话框数据
    #ifdef AFX_DESIGN_TIME
    	enum { IDD = IDD_ABOUTBOX };
    #endif
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    
    // 实现
    protected:
    	DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    
    // CMFCApplication3Dlg 对话框
    
    
    
    CMFCApplication3Dlg::CMFCApplication3Dlg(CWnd* pParent /*=nullptr*/)
    	: CDialogEx(IDD_MFCAPPLICATION3_DIALOG, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CMFCApplication3Dlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CMFCApplication3Dlg, CDialogEx)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    END_MESSAGE_MAP()
    
    
    // CMFCApplication3Dlg 消息处理程序
    
    BOOL CMFCApplication3Dlg::OnInitDialog()
    {
    	CDialogEx::OnInitDialog();
    
    	// 将“关于...”菜单项添加到系统菜单中。
    
    	// IDM_ABOUTBOX 必须在系统命令范围内。
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != nullptr)
    	{
    		BOOL bNameValid;
    		CString strAboutMenu;
    		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
    		ASSERT(bNameValid);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    	//  执行此操作
    	SetIcon(m_hIcon, TRUE);			// 设置大图标
    	SetIcon(m_hIcon, FALSE);		// 设置小图标
    
    	// TODO: 在此添加额外的初始化代码
    
    	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    void CMFCApplication3Dlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    	{
    		CAboutDlg dlgAbout;
    		dlgAbout.DoModal();
    	}
    	else
    	{
    		CDialogEx::OnSysCommand(nID, lParam);
    	}
    }
    
    // 如果向对话框添加最小化按钮,则需要下面的代码
    //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
    //  这将由框架自动完成。
    
    void CMFCApplication3Dlg::OnPaint()
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // 用于绘制的设备上下文
    
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    		// 使图标在工作区矩形中居中
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// 绘制图标
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialogEx::OnPaint();
    	}
    
    	Mat mat = imread("E:\\vs\\image\\11.png");//opencv读取图片
    	imwrite("E:\\vs\\image\\11_new.png", mat);//保存opencv图片
    
    	CImage img;
    	img.Load(L"E:\\vs\\image\\11_new.png");//mfc读取图片
    	int img_w = img.GetWidth(), img_h = img.GetHeight();//获取图片宽高
    
    	UpdateWindow();//刷新窗口
    	CRect rect;//定义矩形类  
    	CWnd *pWnd = GetDlgItem(IDC_STATIC);//获取控件句柄  
    	pWnd->GetClientRect(&rect);	//获取句柄指向控件区域的大小  
    	CDC *pDc = pWnd->GetDC();//获取picture的DC  
    	int win_w = rect.Width(), win_h = rect.Height();//获取窗口宽高
    	pDc->SetStretchBltMode(COLORONCOLOR);
    	img.Draw(pDc->m_hDC, 0, 0, win_w, win_h, 0, 0, win_w, win_h);//画出图片
    	ReleaseDC(pDc);
    }
    
    //当用户拖动最小化窗口时系统调用此函数取得光标
    //显示。
    HCURSOR CMFCApplication3Dlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>(m_hIcon);
    }
    
    
    

    5、运行结果
    在这里插入图片描述

    展开全文
  • 版本VS2013 简单易懂
  • 使用vs2008+C+++opencv2.1.0,实现视频播放,打开摄像机等功能
  • 车牌字符分割MFC OPENCV

    2009-10-28 13:32:08
    车牌字符分割基于对话框上的,用到openCV的知识,分割车牌字符!
  • 车牌字符识别 MFC OPENCV BP网络

    热门讨论 2009-10-28 14:48:15
    车牌字符识别:MFC中基于对话框,运用到OPENCV,BP神经网络中的知识,对单个字符进行识别。因为已经训练好了,所以只要导入数值就好了,不用再去训练了~~~`
  • MFC openCV 图像显示

    2018-04-18 21:49:37
    使用类 cvvImage实现方法http://blog.sina.com.cn/s/blog_8e6bfecf0100xn14.html摄像头读取图像mfc opencvhttps://blog.csdn.net/qq_32171677/article/details/61190719使用cvLoadImage函数读取图像...

    使用类 cvvImage实现方法

    http://blog.sina.com.cn/s/blog_8e6bfecf0100xn14.html

    摄像头读取图像mfc opencv

    https://blog.csdn.net/qq_32171677/article/details/61190719

    使用cvLoadImage函数读取图像

    https://blog.csdn.net/shawpan/article/details/24841695

    展开全文
  • MFC OPENCV学习笔记

    2013-10-28 20:56:39
    MFC中步骤如下 1 单文档 MFC标准 在共享DLL中使用MFC  2 CTestMFCView CScrollView 3 添加附加依赖项 4 往debug中加dll  5 往工程中加CvvImgage.h CvvImgage.cpp 并在头文件和源文件中添加进入 6 在stdafx.h...
    MFC中步骤如下
    
    1 单文档  MFC标准 在共享DLL中使用MFC 
    2 CTestMFCView CScrollView
    3 添加附加依赖项
    4 往debug中加dll 
    5 往工程中加CvvImgage.h CvvImgage.cpp 并在头文件和源文件中添加进入
    6 在stdafx.h中加
    #include <opencv\cv.h>
    #include <opencv\highgui.h>
    #include "CvvImage.h"
    /*
    opencv_highgui243d.lib;
    opencv_core243d.lib;
    opencv_ml243d.lib;
    opencv_imgproc243d.lib;
    */


    7 类视图C。。。CDoc-双击
    第一个pulic 中 
    CvvImage m_image;
    8 类视图中对C。。。CDoc 右击-属性 -重写
    onopendocument 下拉-添加
    添加了一段函数
    BOOL COpencv_Task1Doc::OnOpenDocument(LPCTSTR lpszPathName)
    在里面继续修改
    添加到头文件和源文件,类视图doc.h中,添加 
    m_image.Load(lpszPathName);
    8步骤完成的是打开图片 但是还是看不到图片的,需要在view 写代码让图片显示出来
    9 类视图中C。。。View 单击 下面ondraw(CDC *pDC) 双击
    在里面添加
    if(pDoc->m_image.GetImage())
    {
    RECT rect,rectDC;
    GetClientRect(&rect);


    rectDC=rect;


    long rcWidth=rect.right-rect.left;
    long rcHeight=rect.bottom-rect.top;
    CSize szImg=CSize(pDoc->m_image.GetImage()->width,pDoc->m_image.GetImage()->height);

    if(szImg.cy<rcHeight)
    {
    rectDC.bottom=rectDC.top+szImg.cy;
    }
    if(szImg.cx>rcWidth||szImg.cy>rcHeight)
    {
    SetScrollSizes(MM_TEXT,szImg);
    }
    rectDC.right=rectDC.left+szImg.cx;
    rectDC.bottom=rectDC.top+szImg.cy;
    //pDoc->m_image.DrawToHDC(pDC->GetSafeHdc(),&rectDC);
    pDoc->m_image.DrawToHDC(pDC->GetSafeHdc(), &rectDC);
    }
    添加完后,此函数名 有个形参被屏蔽了记得修改过来void COpencv_Task1View::OnDraw(CDC* /*pDC*/)去掉/**/
    9步骤就完成了图片的显示工作 
    10 资源视图 menu-IDR_MAINFRAME双击 
    单击某处 写入“图像处理”它的下拉菜单写入“直方图均衡化” 再对其右键单击 -属性-写ID号ID_IMG_PROC_EQUA
    在对直方图均衡化 右键-添加事件处理程序
    左侧不变 右侧选择C。。。CDoc 添加编辑
    出现了一个函数 往此函数写代码--也就是怎么处理图像的代码
    IplImage * src = m_image.GetImage();


    if (src)
    {
    IplImage* imgChannel[4] = { 0, 0, 0, 0 };  
    IplImage* dst = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 3 );

    for( int i = 0; i < src -> nChannels; i++ )  
    {  
    imgChannel[i] = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 1 );  //****要求单通道图像才能直方图均衡化  ****//


    //****通道分离  ****//
    cvSplit( src, imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3] );//BGRA  
    for( int i = 0; i < dst -> nChannels; i++ )  
    {  
    //****直方图均衡化,原始图像和目标图像必须是单通道  ****//
    cvEqualizeHist( imgChannel[i], imgChannel[i] );  
    }  

    //****通道组合  ****//
    cvMerge( imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3], dst );  
    /*cvNamedWindow( "src", 1 );  
    cvShowImage( "src", src );  
    cvNamedWindow( "Equalize", 1 );  
    cvShowImage( "Equalize", dst );  */

    m_image.CopyOf(dst);


    UpdateAllViews(NULL);


    //****释放资源  ****//
    for( int i = 0; i < src -> nChannels; i++ )  
    {  
    if( imgChannel[i] )  
    {  
    cvReleaseImage( &imgChannel[i] );  
    //imgChannel[i] = 0;  
    }  
    }  

    cvReleaseImage( &dst );  

    }

    以上完成的是图片的均衡化处理,后续将在这上面继续修改学习。

    展开全文
  • MFC opencv 显示图像

    2009-11-15 16:47:53
    图像会按比例缩放,移动窗口,图像不会消失
  • MFC OPENCV 加载与保存图片

    千次阅读 2013-01-09 12:44:43
    项目当然需要MFCOPENCV结合,加载图像原来用的是cIimge,这个类在opencv2.0以后就没有,没有当然有它的原因,因为在vs2010中已经继承了cImage了,所以我们最好还是用vs2010里面的吧,我是参考这篇文章的,很好,...
  •   前置文章:MFC鼠标滚轮缩放OpenCV图片   使用滚轮缩小图片,使其小于MFC的PictrueContral控件大小时,发现缩小前的图片依旧存在,缩小后的图片重叠在其上。具体错误图片如下所示:   故缩放前先刷新图片。 ...
  • basler pilot系列相机 MFC opencv

    千次阅读 2012-09-01 10:08:13
    采用MFC+ opencv 对basler pilot系列相机,通过千兆以太网接口实现图像数据获取,运行示例程序能够正常获取数据。但是示例程序中相机对象及数据流对象的初始化和数据的获取都是在主函数中的。现在想在mfc中实现单帧...
  • 程序可以执行 但还有一点点 不稳定 大家一起帮助修改 谢谢
  • VS2013 MFC opencv 播放视频

    千次阅读 2015-08-02 10:40:24
    看网上有很多人用的还是CvvImage类,但是Opencv3.0已经没有CvvImage这个类了。百度得之可以使用以前的类,稍作修改就可以了。 头文件: #pragma once #ifndef CVVIMAGE_CLASS_DEF #define CVVIMAGE_CLASS_DEF #...
  • 重新加载包含目录和库目录的文件!!! 重新加载包含目录和库目录的文件!!! 重新加载包含目录和库目录的文件!!!
  • DDA算法画点(MFC Opencv

    千次阅读 2018-06-07 22:12:21
    struct Point { float x; float y; }; Point pointA,pointB; //DDA pointA.x=200; pointA.y=250; pointB.x=100; pointB.y=200; float x,y; int num=0; float A=pointB.x-pointA....
  • 由于本人从来没有做过这一方面的东西,找了大量的资料和各种文章看了之后,决定用opencv来做 ,但是用了之后才发现后面的坑有点坑爹,坑爹,坑爹,重要的事情说三遍 本人用的 opencv 头文件,lib dll文件如下地址 ...
  • 各位大神好,我是一名即将大三的学生,老师要求我做一个窗口,能打开摄像头, 捕捉图片里的物体,并找到物体的中心点,然后传给机械手臂将物体抓起来, 现在一头雾水,请问还剩一周能完成吗?该从哪入手,各位大牛,...
  • //从文件中读入图像 1 AfxMessageBox(strPathName); //D:\demo\1.jpg 2 strPathName.Replace(_T("\\\"),_T("\\\\\\\")); 3 AfxMessageBox(strPathName); //D:\\\demo\\\1.jpg ...4 Mat img = imread("strPathName")...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,409
精华内容 2,563
关键字:

mfcopencv