将unsigned short mat转换为opencv中的vector
convert unsigned short mat to vector in opencv
我在opencv中加载了一个深度图像
cv::Mat depth = cv::imread("blabla.png",CV_LOAD_IMAGE_UNCHANGED);
然后用
得到它的子图像cv::Mat sub_image= depth(cv::Rect( roi_x,roi_y,roi_size,roi_size)).clone();
现在我想把sub_image转换成向量
我试试
std::vector<uchar> array;
array.assign(sub_image.datastart,sub_image.dataend);
,在这里发现StackOverflow在一个类似的问题,但它似乎不能正常工作。
赋值后数组的大小不是roi_size * roi_size,而是roi_size*roi_size*2
是向量的类型有问题吗??我还尝试了各种其他类型,如double, float, int等
深度图像的类型是unsigned short,对吗??
编辑:数组填充正确(正确大小roi_size*roi_size)当我规范化深度图像
cv::Mat depthView;
cv::normalize(depth, depthView, 0, 255, cv::NORM_MINMAX,CV_8UC1);
但那不是我想做的
您对roi_size*roi_size*2
的观察是由于深度图像为short
类型,其大小分别为2 bytes
。您正在尝试将此图像数据推送到类型为unsigned char
的数组。
使向量类型为short
,您将发现数组大小如预期的那样回到roi_size*roi_size
。
您是否尝试检查您读取的图像类型,即使用depth.type() == CV_8UC1
用于8位uchar与1通道。
可能你的图像被不同的解释。你试过用CV_LOAD_IMAGE_GRAYSCALE
而不是CV_LOAD_IMAGE_UNCHANGED
来读取图像吗?
谢谢大家的帮助,我想我已经解决了这个问题。
我将数组赋值的代码更改为
std::vector<unsigned short> array(sub_image.begin<unsigned short>(),sub_image.end<unsigned short>());
,现在大小是正确的roi_size*roi_size
再次感谢您的帮助
相关文章:
- C++OpenCV中的快速索引
- 如何通过opencv中的程序参数定义特征类型?
- 从OpenCV中的三个单个垫子创建BGR垫
- 如何从OpenCV中的目录中按顺序读取文件并使用它进行处理?
- 使用OpENCV中的两个视频仪捕获同一设备
- openCV中的Absdiff可以编译,但显示黑色图像
- opencv中的vec4i是什么
- C OPENCV中的错误是我的第一个代码(中值过滤器)
- 将 openCv 中的曲线从 ROI 转换为帧
- 未定义的参考,差异使用 CUDA 的 OpenCV 中的双边过滤器
- 从直方图OPENCV中的峰中获取色调值
- OpenCV中的MAT和SPARSEMAT有什么区别
- 获取具有X,Y和距离的OPENCV中的3D坐标
- 如何使用Raspberry Pi相机作为C ++ OpenCV中的视频输入
- OpenCV中的Hessian-仿射检测器
- 如何通过Android NDK(C )将图像放入OpenCV中的垫子中
- OPENCV中的GSTREAMER不会通过UDP发送视频数据
- 对于OpenCV中的每个循环
- 快速节省图像到OpenCV中的磁盘
- 如何将 opencv 中的图像数组传递给函数