[转]Qt中QImage与OpenCV中Mat相互转换
(2013-12-20 13:13:20)分类: Qt |
1.Mat to QImage
QImage mat2qimage(const cv::Mat& mat)
{
cv::Mat rgb;
cv::cvtColor(mat, rgb, CV_BGR2RGB);
}
2.QImage to Mat
cv::Mat qimage2mat(const QImage& qimage)
{
cv::Mat mat = cv::Mat(qimage.height(), qimage.width(),
CV_8UC4, (uchar*)qimage.bits(),
qimage.bytesPerLine());
cv::Mat mat2 = cv::Mat(mat.rows, mat.cols, CV_8UC3
);
int from_to[] = { 0,0, 1,1, 2,2 };
cv::mixChannels( &mat, 1, &mat2, 1, from_to, 3
);
return mat2;
}
3.这里再做一些归纳总结。
其实,格式转换无非就是找到格式间参数的对应关系:
数据指针 uchar* bits()
uchar* data
宽度
int width()
int
cols
高度
int height()
int
rows
步长 int
bytesPerLine() cols * elemeSize()
格式
Format_Indexed8
8UC1, GRAY,灰度图
在转换的过程中一定要先判断图像的格式,QImage用QImage::format(),
Mat中用Mat::channels(),然后再设置相应的转换参数