在opencv中将无符号短垫转换为矢量
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);
在 Whosebug 中发现了一个类似的问题,但它似乎无法正常工作。
赋值后数组的大小不是roi_size * roi_size,
而是 roi_size*roi_size*2
vector的类型有问题吗??我还尝试了各种其他类型,如 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
.
类型的数组
将vector类型设置为short
,你会发现数组大小如期回到了roi_size*roi_size
。这些值也将是您期望的值。
您是否尝试检查您阅读的图像类型,即 depth.type() == CV_8UC1
用于 1 通道的 8 位 uchar。
可能你的图片被不同地解读了。
您是否尝试过使用标志 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
再次感谢您的帮助。
我用
在 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);
在 Whosebug 中发现了一个类似的问题,但它似乎无法正常工作。
赋值后数组的大小不是roi_size * roi_size, 而是 roi_size*roi_size*2
vector的类型有问题吗??我还尝试了各种其他类型,如 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
.
将vector类型设置为short
,你会发现数组大小如期回到了roi_size*roi_size
。这些值也将是您期望的值。
您是否尝试检查您阅读的图像类型,即 depth.type() == CV_8UC1
用于 1 通道的 8 位 uchar。
可能你的图片被不同地解读了。
您是否尝试过使用标志 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
再次感谢您的帮助。