如海光谱仪二次开发(c++_64位)

首先,申明本人属于小白(学生),因为这种小众的开发我没找到教程,想分享出来和大家交流互相学习(大佬指点),写这个也纯属于分享和记录。

第一步:问如海官方要到二次开发的sdk开发包(64位的dll文件)

开发包里[4]里一般有大家需要的dll文件、lib文件和.h文件等(这里就不赘述,可以根据下面所提的到的自己找一下放入自己的工程中)。

 然后,新建自己的项目,这里我新建了自己的一个项目cam_test。

然后把SeaBreeze.dll文件复制到自己新建工程下含.exe文件的文件夹下。

 把SeaBreeze.lib、SeaBreezeWrapper.h、stdafx.cpp、stdafx.h、targetver.h复制到自己新建工程下含.cpp文件的文件夹下。虽然你已经加入文件夹里,但是你需要在项目里自己添加现有文件把.h文件添加进去(完全是为了方便看),可以不添加但是后面可能需要修改程序,就需要你单独打开修改.h文件。(这些文件是我在调试程序时,报错需要的文件我当时一个一个补全的)

完成后打开在项目的.cpp文件中的main里添加代码:

#include<stdio.h>
#include<string.h>
#include <vector>
#include <unordered_map>
#include "cam_test.h"
#include "stdafx.h"
#include "SeaBreezeWrapper.h"


#ifdef _MSC_VER
#pragma comment(lib, "SeaBreeze.lib")
#endif

int  main()
{
	int errorCode = 0;
	SeaBreezeWrapper *wrapper = SeaBreezeWrapper::getInstance();
	int devcount = wrapper->openAllSpectrometers(&errorCode);

	if (devcount == 1) {
		int index = 0;

		//设置积分时间1秒, 注意,底层积分时间单位是us。所以这里要乘以1000
		wrapper->setIntegrationTimeMicrosec(index, &errorCode, 10001000); // 1000ms

		double *wavelength = new double[2048];
		//获取波长系数
		wrapper->getWavelengths(index, &errorCode, wavelength, 2048);

		//关闭激光,采集暗光谱
		wrapper->setLaserSwitch(index, &errorCode, 0); //switch OFF laser


		double *darkspectrum = new double[2048];
		wrapper->getFormattedSpectrum(index, &errorCode, darkspectrum, 2048); // get dark spectrum

		//打开激光,
		wrapper->setLaserSwitch(index, &errorCode, 1); //switch ON laser

		//设置激光器功率 
		wrapper->setLaserPower(index, &errorCode, 500);// set power (value 0-500)


		double* lightspectrum = new double[2048]; //get light spectrum

		//采集明光谱
		wrapper->getFormattedSpectrum(index, &errorCode, lightspectrum, 2048); //get light spectrum
		for (size_t i = 0; i < 2047; i++)
		{
			cout << lightspectrum[i] << endl;
		}
		//关闭激光
		wrapper->setLaserSwitch(index, &errorCode, 0); //switch OFF laser

		 //get spectrum subtract.
		double *spectrum = new double[2048];

		//对2048每一个像素点 (注意有的光谱仪不是2048像素,这里需要根据不同光谱仪进行修改)
		for (int i = 0; i <= 2048; i++) {
			//明光谱减去暗光谱
			spectrum[i] = lightspectrum[i] - darkspectrum[i];
		}

		//convert to ramanshift
		double *shifts = new double[2048];
		for (int i = 0; i <= 2048; i++) {
			shifts[i] = 1e7 * 785 - 1e7*wavelength[i];
		}

		//%%%%wavelength shifts spectrum is what you want,这三个参数是你需要的,可以根据投射反射的公式去计算出自己需要的。%%%%%
		wrapper->closeAllSpectrometers(&errorCode); // close the device

		delete[] wavelength;
		delete[] spectrum;
		delete[] shifts;
	}
}

接着我们就需要把官方文件fastdemo里的api文件夹整个复制一下,粘贴到自己新建项目的文件夹下

 然后打开SeaBreezeWrapper.h文件,把路径改成刚在你粘贴api的路径 #include "../api/DllDecl.h"

 全部完成后,连接光谱仪就可以采集数据啦!

1、整体都是64位的环境下完成注意不要在86位下。

2、还有导入他的dll文件可能会导致自己的项目属性发生变化,一些版本和工具集你可能没安装,你可以打开项目属性自己改成自己安装的也可以正常运行。(下图是我自己遇到的这两个我没安装的)

 其他问题ing。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值