【学习OpenCV】通过DLL实现图像数据从.dat导入Mat

目的:主要为了将C++的图像处理部分交给C#界面,特此学习怎么用DLL。

一、生成DLL

1、在vs中创建名为datFile的dll项目,设置包含目录和库目录为opencv路径

2、编写datFile类的头文件和实现

datFile.h

#ifndef DATFILE_H 
#define DATFILE_H

#include <iostream>  
#include <fstream>
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/gpu/gpu.hpp"
#include "opencv2/contrib/contrib.hpp"   //所用到的头文件

#pragma comment( lib, "opencv_core249d.lib" )
#pragma comment( lib, "opencv_highgui249d.lib" )
#pragma comment( lib, "opencv_imgproc249d.lib" )
#pragma comment( lib, "opencv_gpu249d.lib" )
#pragma comment( lib, "opencv_contrib249d.lib" )  //所用到的lib

using namespace std;
using namespace cv;  //命名空间

typedef int16_t datasize;  //图像数据大小

class _declspec(dllexport) datFile  //类声明,dllexport表示从dll中导出类
{
public:
	void read(const char* filename, Mat& src);  //从.dat导出数据
	int16_t height;  
	int16_t width;   //图像尺寸
};

#endif 
datFile.cpp

#include "stdafx.h"
#include "datFile.h"

void datFile::read(const char* filename, Mat& src)
{
    <span style="white-space:pre">	</span>//输入原始数据
	ifstream datfile(filename, ios::in|ios::binary);		
<span style="white-space:pre">	</span>datfile.read ((char*)&height, sizeof(int16_t));
	datfile.read ((char*)&width, sizeof(int16_t));	
	src.create(height, width, CV_16UC1);
	datfile.read ((char*)src.data, height*width*sizeof(datasize)); 
    <span style="white-space:pre">	</span>datfile.close();
}

分别添加到项目的头文件和源文件中,编译,获得datFile.dll和datFile.lib

二、调用DLL

1、创建名为testDll的控制台项目,设置包含目录和库目录为opencv路径

2、把datFile.cpp拷贝至本目录并添加头文件

3、编写测试代码。

testDll.cpp

#include "stdafx.h"
#include "readDat.h"  //包含类声明头文件  
#pragma comment(lib,"lib所在路径\\datFile.lib")  //或者把lib拷贝至本目录,直接填"datFile.lib"

int _tmain(int argc, _TCHAR* argv[])
{
	Mat src;
	datFile dat;
	dat.read("dat文件所在路径\\raw.dat",src);

	namedWindow("show",CV_WINDOW_NORMAL);
	resizeWindow("show",dat.height,dat.width);
	imshow("show",src);

	waitKey(0);
	return 0;
}

编译,得到testDll.exe


4、将datFile.dll和相关的opencv的dll(包括tbb的lib)与testDll.exe放在同一个文件夹里,那么在别的没有部署opencv的机器上也可以运行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值