用C++将字节arry转换为OpenCV图像
Convert a byte arry to OpenCV image in C++
我有一个字节数组,它表示一个.jpg文件,我想将其直接转换为OpenCV Mat对象。
我有类似的东西
byte* data; // Represents a JPG that I don't want to disk and then read.
// What goes here to end up with the following line?
cv::Mat* image_representing_the_data;
如果是PIXEL数据,前面提到的方法会很好地工作。
如果在内存、头文件、压缩等等中都有一个完整的jpg文件,那么它就不起作用了。
在这种情况下,你想要:
Mat img = imdecode(data);
它将执行与imread()
相同的操作,仅来自内存,而不是来自文件名
@bob提到,这可以使用Mat构造函数来完成。
byte *data;
cv::Mat imageWithData = cv::Mat(sizeOfData, 1, CV_8U, data).clone();
创建此矩阵后,使用图像中的行数调用整形函数。
cv::Mat reshapedImage = imageWithData.reshape(0, numberOfRows);
cv::Mat GetImageFromMemory(uchar* image, int length, int flag)
{
std::vector<uchar> data = std::vector<uchar>(image, image + length);
cv::Mat ImMat = imdecode(data, flag);
return ImMat;
}
参数"flag"是指图像的类型、灰度、颜色、任何相位。。具有opencv定义的
使用cv::Mat1b的效率要高得多,并且不会复制比所需多2倍的内存
cv::Mat GetImageFromMemory(uchar* image, int length, int flag)
{
cv::Mat1b data(1, length, image));
return imdecode(data, flag);
}
相关文章:
- OpenCV图像大小限制
- 如何将OpenCV图像数据从Python转换为C++?
- ROS中未定义的参考误差到OpenCV图像转换器
- C++:灰度位图标题和实时绘画+opencv图像处理
- 通过插座读取Python中的OpenCV图像
- OPENCV图像处理,向量下标超出范围
- 当摄影机参数已知时,OpenCV图像静置
- 访问linux的OpenCV-2.4.3的OPENCV图像处理库
- C OPENCV图像在Boost线程中不显示
- 图像搜索(C )中的OPENCV图像
- 在OpenCV图像中添加文本标签
- 将点云2数据转换为opencv图像
- OpenCv 图像块,大小错误
- 将opencv图像转换为gdi位图不起作用取决于图像大小
- 如何将labview图像类型转换为opencv图像类型(或Mat)
- 用C++将字节arry转换为OpenCV图像
- 嵌入OpenCV图像
- C++通过套接字发送OpenCV图像
- 为什么我在尝试将opencv图像数据指针转换为char*时出错
- OpenCV图像尺寸,而不读取整个图像