【问题标题】:Display Qbytearray as Image in QT 5.12.9 version在 QT 5.12.9 版本中将 Qbytearray 显示为 Image
【发布时间】:2021-04-01 23:54:34
【问题描述】:

我正在使用 QTcpSocket 读取 QByteArray 并将数组转换为 cvMat 图像。使用 imshow() 显示图像。但我得到的是灰色图像。 代码如下。

//array ->QBytearray (received from socket) 
cv::Mat img,img1;
    img.cols=320;
    img.rows=240;
img = cv::Mat(240,320, CV_8UC1,array.data());
cv::cvtColor(img, img, CV_GRAY2RGB);  // 
      cv::imshow("image display",img);
      cv::waitKey(5000);

在 cvtColour() 函数之后也没有转换成彩色图像。

提前致谢。

【问题讨论】:

  • cv::Mat::convertTo。在cvtColor src 和 dest 具有相同的深度。
  • 用 CV_8UC3 测试一下
  • @rafix07 在更改 src 和目标后也显示相同的灰色图像。
  • 请出示序列化和发送图片的代码。
  • @Farshid616 它会引发错误。 OpenCV 错误: cvtColor 中的断言失败 (scn == 1 && (dcn == 3 || dcn == 4)),文件 /build/opencv-ys8xiq/opencv-2.4.9.1+dfsg/modules/imgproc/src/color .cpp,第 3789 行终止在抛出“cv::Exception”实例后调用什么():/build/opencv-ys8xiq/opencv-2.4.9.1+dfsg/modules/imgproc/src/color.cpp:3789:错误: (-215) scn == 1 && (dcn == 3 || dcn == 4) in function cvtColor Aborted (core dumped)

标签: c++ qt opencv opencv-mat


【解决方案1】:

这是单独修改频道的方法:

img = cv::Mat(240,320, CV_8UC1,array.data());
cv::Mat img1;
cv::divide(img,cv::Scalar(2),img1);
std::vector<cv::Mat> channels;
   
channels.push_back(img);
channels.push_back(img1);
channels.push_back(img);
cv::merge(channels, img);

cv::imshow("image display",img);
cv::waitKey(5000);

【讨论】:

  • 感谢您的及时帮助。但是原始客户端图像和服务器 QT 图像之间存在差异。 @server 端它只显示一种颜色。
  • 将cv mat图像转换成Qimage然后在QT中显示是不是好办法
猜你喜欢
  • 2016-08-14
  • 2013-10-08
  • 1970-01-01
  • 2011-08-24
  • 2021-10-21
  • 2017-12-13
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多