http://download.youkuaiyun.com/download/qq_35971623/10115253这是我根据源码改的opencv调用大恒工业相机的源码
现阶段由于帮老师做一个关于用大恒工业相机做视觉的项目,遇到了相机打开,格式转换,相机关闭等问题,有用过大恒相机的大佬也希望能出来分享一下
出于互相学习,互相促进,减少弯路的目的,现分享我对于格式转换的心得
由于网络传输的图像都是字节流的,而opencv对于图像的操作都是mat类型的,所以对于byte的字节流转换成mat就成了一个难题
由于我现在的相机调用存在问题,故现在只是在opencv上用图片进行操作,原理应该差不多,只要把*buffer变成你从相机流获得的数据即可
代码:
#include "opencv2/opencv.hpp"
#include "iostream"
#include<conio.h>
#include"GalaxyIncludes.h"
using namespace cv;
using namespace std;
Mat bytesToMat(byte * bytes,int width,int height)
{
Mat image = Mat(height,width,CV_8UC3,bytes).clone(); // make a copy
return image;
}
void main()
{
int key;
Mat src=imread("1.bmp");
Mat dst;
imshow("src",src);
int length = (int) (src.total() * src.elemSize());//total返回数组元素的总数 elemSize该方法返回以字节为单位的矩阵元素大小。例如,如果矩阵类型是 CV_16SC3,该方法返回3*sizeof(short)或 6
cout<<"length"<<length<<endl;
byte *buffer = new byte[length];
memcpy(buffer,src.data,length * sizeof(byte));
dst=bytesToMat(buffer,src.cols,src.rows);
imshow("dst",dst);
waitKey(0);
}
效果:
我是把一幅图像先转换成byte字节流,然后再从byte字节流转换成mat类型
千仓万箱,非一耕所得
干天之木,非旬日所长