关于byte与Mat类型的互换

来源:互联网 发布:手机网络抓包工具 编辑:程序博客网 时间:2024/05/23 18:15

http://download.csdn.net/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类型

千仓万箱,非一耕所得

干天之木,非旬日所长

原创粉丝点击