我已经尝试寻找并尝试了我找到的一切,但是还没有找到解决这个问题的方法。
我正在尝试通过按钮单击更新QT应用程序中的图像。
在构造函数中,我已经成功显示了一张图片:
然后我创建了一个按钮,将这个功能与它链接起来。
这是函数:
但是,当我点击按钮时,整个图像都变成了白色。有人有什么想法吗?
我正在尝试通过按钮单击更新QT应用程序中的图像。
在构造函数中,我已经成功显示了一张图片:
cv::Mat temp = cv::Mat(*this->cv_size,CV_8UC3);
temp = cv::Scalar(0,255,155);
ui->image->setPixmap(QPixmap::fromImage( Mat2QImage(temp)));
然后我创建了一个按钮,将这个功能与它链接起来。
void UIQT::refreshImage(){
cv::Mat temp = cv::Mat(*this->cv_size,CV_8UC3);
temp = cv::Scalar(0,255,0);
ui->image->setPixmap(QPixmap::fromImage( Mat2QImage(temp)));
std::cout << "refreshed" << std::endl;
}
这是函数:
QImage UIQT::Mat2QImage(cv::Mat const& src) {
cv::Mat temp(src.cols,src.rows,src.type());
cvtColor(src, temp,CV_BGR2RGB);
QImage dest= QImage((uchar*) temp.data, temp.cols, temp.rows, temp.step, QImage::Format_RGB888);
return dest;
}
但是,当我点击按钮时,整个图像都变成了白色。有人有什么想法吗?
repaint()
是完全不必要的。你不需要将那个 pixmap 存储为成员,它可以是临时的。你从哪里得到了Mat2QImage
?为什么无缘无故使用在堆上分配的QImage
?哦,两个代码片段之间的区别很明显:在第一个片段中,你设置了temp=cv::Scalar(0,0,255)
,而在第二个片段中则是temp=cv::Scalar(0,255,0)
。当你测试这样的东西时,你必须做到 完全 相同。 - Kuba hasn't forgotten MonicaMat2QImage
函数返回一个引用悬空指针的QImage
。 - Kuba hasn't forgotten Monica