highgui: Qt - restore convertscale semantics
authorPavel Rojtberg <pavel.rojtberg@igd.fraunhofer.de>
Fri, 16 Nov 2018 15:13:05 +0000 (16:13 +0100)
committerPavel Rojtberg <pavel.rojtberg@igd.fraunhofer.de>
Fri, 16 Nov 2018 15:13:05 +0000 (16:13 +0100)
broken in 11eafca3e2a4cbc62f1309d25db0ea3ed9a6ea8e

modules/highgui/src/window_QT.cpp

index a3479a5..9fd8093 100644 (file)
@@ -2557,7 +2557,14 @@ void DefaultViewPort::updateImage(const CvArr* arr)
     nbChannelOriginImage = cvGetElemType(mat);
     CV_Assert(origin == 0);
     cv::Mat src = cv::cvarrToMat(mat), dst = cv::cvarrToMat(image2Draw_mat);
-    cv::cvtColor(src, dst, cv::COLOR_BGR2RGB, dst.channels());
+
+    cv::Mat tmp;
+    int src_depth = src.depth();
+    double scale = src_depth <= CV_8S ? 1 : src_depth <= CV_32S ? 1./256 : 255;
+    double shift = src_depth == CV_8S || src_depth == CV_16S ? 128 : 0;
+    cv::convertScaleAbs(src, tmp, scale, shift);
+
+    cv::cvtColor(tmp, dst, cv::COLOR_BGR2RGB, dst.channels());
     CV_Assert(dst.data == image2Draw_mat->data.ptr);
 
     viewport()->update();