2 |
jakw |
1 |
#include "SMVideoWidget.h"
|
120 |
jakw |
2 |
#include "cvtools.h"
|
2 |
jakw |
3 |
|
|
|
4 |
SMVideoWidget::SMVideoWidget(QWidget *parent) : QLabel(parent){
|
|
|
5 |
|
|
|
6 |
}
|
|
|
7 |
|
|
|
8 |
static QImage cvMat2qImage(cv::Mat mat){
|
|
|
9 |
|
113 |
jakw |
10 |
// 8-bits unsigned, raw bayer image
|
2 |
jakw |
11 |
if(mat.type()==CV_8UC1) {
|
113 |
jakw |
12 |
cv::Mat rgb;
|
|
|
13 |
cv::cvtColor(mat, rgb, CV_BayerBG2RGB);
|
|
|
14 |
QImage img((const uchar*)rgb.data, rgb.cols, rgb.rows, rgb.step, QImage::Format_RGB888);
|
114 |
jakw |
15 |
img = img.copy();
|
2 |
jakw |
16 |
return img;
|
113 |
jakw |
17 |
// 8-bit unsigned rgb image
|
2 |
jakw |
18 |
} else if(mat.type()==CV_8UC3) {
|
|
|
19 |
// Copy input Mat
|
|
|
20 |
QImage img((const uchar*)mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
|
23 |
jakw |
21 |
return img;
|
120 |
jakw |
22 |
// 16-bit unsigned, raw bayer image
|
21 |
jakw |
23 |
} else if(mat.type()==CV_16UC1) {
|
120 |
jakw |
24 |
cv::Mat mat8bit = mat.clone();
|
|
|
25 |
cvtools::rshift(mat8bit, 8);
|
|
|
26 |
mat8bit.convertTo(mat8bit, CV_8UC1);
|
|
|
27 |
cv::Mat rgb;
|
|
|
28 |
cv::cvtColor(mat8bit, rgb, CV_BayerBG2RGB);
|
|
|
29 |
QImage img((const uchar*)rgb.data, rgb.cols, rgb.rows, rgb.step, QImage::Format_RGB888);
|
|
|
30 |
img = img.copy();
|
|
|
31 |
return img;
|
113 |
jakw |
32 |
// 16-bit unsigned rgb image
|
23 |
jakw |
33 |
} else if(mat.type()==CV_16UC3) {
|
|
|
34 |
mat.convertTo(mat, CV_8UC3, 1.0/256.0);
|
|
|
35 |
return cvMat2qImage(mat);
|
113 |
jakw |
36 |
// 32bit floating point gray-scale image
|
2 |
jakw |
37 |
} else if(mat.type()==CV_32FC1) {
|
|
|
38 |
cv::Mat rgb(mat.size(), CV_32FC3);
|
|
|
39 |
cv::cvtColor(mat, rgb, cv::COLOR_GRAY2RGB);
|
|
|
40 |
QImage img((const uchar*)rgb.data, rgb.cols, rgb.rows, rgb.step, QImage::Format_RGB32);
|
114 |
jakw |
41 |
img = img.copy();
|
2 |
jakw |
42 |
return img;
|
245 |
jakw |
43 |
} else if(mat.type()==CV_32FC3) {
|
|
|
44 |
QImage img((const uchar*)mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB32);
|
|
|
45 |
img = img.copy();
|
|
|
46 |
return img;
|
2 |
jakw |
47 |
} else {
|
23 |
jakw |
48 |
std::cerr << "SMVideoWidget: cv::Mat could not be converted to QImage!";
|
2 |
jakw |
49 |
return QImage();
|
|
|
50 |
}
|
113 |
jakw |
51 |
|
|
|
52 |
// 8-bit unsigned gray-scale image
|
|
|
53 |
// } else if(mat.type()==CV_8UC1) {
|
|
|
54 |
// // Set the color table (used to tranMVate colour indexes to qRgb values)
|
|
|
55 |
// QVector<QRgb> colorTable;
|
|
|
56 |
// for (int i=0; i<256; i++)
|
|
|
57 |
// colorTable.push_back(qRgb(i,i,i));
|
|
|
58 |
// // Copy input Mat
|
|
|
59 |
// QImage img((const uchar*)mat.data, mat.cols, mat.rows, mat.step, QImage::Format_Indexed8);
|
|
|
60 |
// img.setColorTable(colorTable);
|
|
|
61 |
// return img;
|
2 |
jakw |
62 |
}
|
|
|
63 |
|
|
|
64 |
|
|
|
65 |
void SMVideoWidget::showImageCV(cv::Mat image){
|
207 |
flgw |
66 |
if(image.rows){
|
|
|
67 |
QImage qimage = cvMat2qImage(image);
|
2 |
jakw |
68 |
|
207 |
flgw |
69 |
// correct size only if label has no borders/frame!
|
|
|
70 |
int w = this->width();
|
|
|
71 |
int h = this->height();
|
2 |
jakw |
72 |
|
207 |
flgw |
73 |
pixmap = QPixmap::fromImage(qimage);
|
|
|
74 |
this->setPixmap(pixmap.scaled(w,h,Qt::KeepAspectRatio));
|
|
|
75 |
}
|
2 |
jakw |
76 |
}
|
28 |
jakw |
77 |
|
|
|
78 |
void SMVideoWidget::resizeEvent(QResizeEvent *event){
|
|
|
79 |
|
|
|
80 |
if(!pixmap.isNull()){
|
|
|
81 |
// correct size only if label has no borders/frame!
|
|
|
82 |
int w = event->size().width();
|
|
|
83 |
int h = event->size().height();
|
|
|
84 |
this->setPixmap(pixmap.scaled(w,h,Qt::KeepAspectRatio));
|
|
|
85 |
}
|
|
|
86 |
}
|