【发布时间】:2014-04-04 20:05:49
【问题描述】:
我已尝试环顾四周并尝试了我找到的所有方法,但没有找到解决此问题的方法。
我正在尝试通过单击按钮来更新 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()完全没有必要。您不需要将该像素图存储为成员,它可以是临时的。你从哪里得到Mat2QImage?为什么你无缘无故地使用在堆上分配的QImage?哦,两个 sn-ps 之间的区别很明显:在第一个中,您设置temp=cv::Scalar(0,0,255),在第二个中设置temp=cv::Scalar(0,255,0)。当你测试这些东西时,你必须完全相同做同样的事情。 -
感谢您的回答。关于配置。这只是解决问题的众多尝试之一。当我不使用 repaint() 时,什么都没有发生。而且我猜像素图可能是临时的,但这是有人在其他主题中找到的解决方案。
-
我撤回关于重绘的评论。同样的事情发生了,所以我想你是对的,因为它是不必要的。
-
"帽子是有人在其他主题中找到的解决方案。"在使用之前,您需要准确了解假定的修复工作的原因。否则你只是让自己相信童话、传说和传说。那些属于社会文化,而不是解决问题。
-
您的
Mat2QImage函数返回一个引用悬空指针的QImage。