我使用
在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等
深度图像的类型是无符号短吗??
编辑:
我对深度图像进行标准化时,数组填充正确(正确大小为roi_size * roi_size)
cv::Mat depthView;
cv::normalize(depth, depthView, 0, 255, cv::NORM_MINMAX,CV_8UC1);
但那不是我想做的事情
答案 0 :(得分:0)
您对roi_size*roi_size*2
的观察是由于深度图片属于short
类型,每个尺寸为2 bytes
。您正尝试将此图像数据推送到unsigned char
类型的数组。
将矢量类型设为short
,您会发现数组大小按预期返回roi_size*roi_size
。这些价值也是你所期望的。
答案 1 :(得分:0)
您是否尝试过检查您所读取的图像类型,即使用depth.type() == CV_8UC1
进行8位uchar和1个频道。
也许你的形象被解读了。
您是否尝试使用标记CV_LOAD_IMAGE_GRAYSCALE
而不是CV_LOAD_IMAGE_UNCHANGED
来阅读图像?
答案 2 :(得分:0)
感谢所有帮助人员, 我想我设法解决了这个问题。
我将数组赋值的代码更改为此
std::vector<unsigned short> array(sub_image.begin<unsigned short>(),sub_image.end<unsigned short>());
现在大小正确roi_size * roi_size
再次感谢您的帮助。