mfc使用opencv3.1

本文详细介绍了如何在MFC环境下配置OpenCV3.1.0,包括下载、复制文件、设置库链接、调整项目为64位、添加头文件和实现显示图片功能。关键步骤包括添加opencv库路径、处理四字节对齐问题以及使用OpenCV处理图像的函数操作。
摘要由CSDN通过智能技术生成

MFC配置opencv3.1.0的方法:

需要注意的一小点是,opencv3.1.0的平台集是vc12和vc14的并且下载里面的只有x64版本。mfc在显示图片的时候是4字节对齐的,所以要把opencv的的data数据进行对齐。

1.下载opencv3.1.0,网址为 http://opencv.org/,也建议在这个网站上下载。

2.双击后会解压opencv-3.1.0.exe,得到一个opencv的文件夹,并打开这个文件夹。从这个文件夹里找build文件夹下的include和x64文件夹,这两个文件夹需要复制出来。


3.打开vs2013,并新建一个单文档,并完成向导,个人是默认的向导。

4.将2中提到的那个两个文件夹复制到刚才的新建的单文档项目中。




5.在stdafx.h里添加如下代码进行lib的链接,链接的路径就是刚才复制x64的那个路径


可以看见路径在x64 v12 lib中,所以stadafx.h的代码可以写成


#ifndef ____OPENCV_USER____
#define ____OPENCV_USER____


#ifndef ____OPENCV_USER____
#define ____OPENCV_USER____


#include "include/opencv2/opencv.hpp"
#ifdef _WIN64
#pragma comment(lib,"x64/vc12/lib/opencv_world310.lib")
#endif
#endif // _WIN64


不过在此之前,要把程序调成x64的,因为提过的dll是x64的,如果需要x86的可以使用opencv2.4.13版或者自己编译一个x86的。


新建一个x64的活动解决方案平台并从win32复制过来。


6.在属性里面设置下包含目录



为了能让单文档显示图片,我新建了一个头文件和cpp去写opencv的函数如图。

//OpencvProc.h

#pragmaonce

#include"stdafx.h"

#include<vector>

#include<iostream>

#include"opencv2\core\mat.hpp"

#include"opencv2\opencv.hpp"

 

usingnamespacestd;

usingnamespacecv;

 

 

 

#ifndef____OPENCV_DEAL____

#define____OPENCV_DEAL____

 

classopencv

{

 

private:

    int             noOfCordinates;     //Number of elements in coordinate array

    Point           *cordinates;        //Coordinates arrayto store model points  

    int             modelHeight;        //Template height

    int             modelWidth;         //Template width

    double          *edgeMagnitude;     //gradient magnitude

    double          *edgeDerivativeX;   //gradient in X direction

    double          *edgeDerivativeY;   //radient in Y direction   

    Point           centerOfGravity;    //Center of gravity of template

    bool            modelDefined;

 

public:

    opencv();

    ~opencv();

    Matmat0;               //第一缓存图像

    Matmat1;               //第二缓存图像

    Matmat2;               //第三缓存图像

    Matmat3;               //第四缓存图像

    MatCameramat;          //用于摄像机图像缓存

    boolCameramatOK;       //取图片判断;

    uchar*mat_data0;   //由于图像问题需要四字节对齐,对应给mat

    uchar*mat_data1;   //由于图像问题需要四字节对齐,对应给mat1

    uchar*mat_data2;   //由于图像问题需要四字节对齐,对应给mat2

    uchar*mat_data3;   //由于图像问题需要四字节对齐,对应给mat3

 

    // 原始图片

    Matm_RawImg;

    // 处理后的图片

    Matm_ResultImg;

 

    voidLoadMatImg(stringstr);

    voidswapValue(uchar&a,uchar&b);         //交换值

 

    LPBITMAPINFOCreateMapInfo(constMat&src);//创建图像头

 

    boolBmpToMat(BITMAPINFO*bmpinfo,BYTE*imageData,Mat&dst);//bmp转mat

 

    CStringSaveImage(constMat&src1,CStringstr= L"");  //保存图片

    CStringSaveImage(constMat&src1,CStringdir,CStringstr);

 

    floatProcessImg(Mat&src);

    floatProcessImg(Mat&src,Rectrect);

    voidConvert2GRAY(constMat&src,Mat&dst);

    voidConvert2BGR(constMat&src,Mat&dst);

    voidMonoInvert(Mat&src);                  //图像翻转一下

    boolCopyMatDataToMem(constMat&src,uchar**data);

    boolcvInit();

   

};

 

#endif

//opencvProc.cpp

#include"stdafx.h"

#include"opencvProc.h"

 

//注意图像训练的时候是否翻转!!!!!!

#pragmawarning(disable:4267)

 

floatopencv::ProcessImg(Mat&src,Rectrect)

{

    return1.0;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值