我通过创建50x50单通道矩阵来测试Mat类功能,一旦显示,就会产生黑色图像。不幸的是,我的程序崩溃在以下代码的第3行:
cv::Mat projImg = cv::Mat::zeros(50, 50, CV_8U);
cv::namedWindow( "Test");
cv::imshow("Test", projImg);
错误劣质停止,因为它收到了来自操作系统的信号。信号名称:SIGABRT 。这很奇怪,因为这段代码非常简单。
我用Qt 4.0.2运行Ubuntu 16.04 64位。
n.b。即使将projImg设置为常规图像,我也会得到相同的错误
cv::Mat projImg = cv::imread("/home/is/Downloads/test.jpg");
答案 0 :(得分:0)
您的基本OpenCV
功能不太可能出错。因此,可能会出现OpenCV
未配置为使用Qt
支持构建的情况
清单:
highgui
方法,以确保核心OpenCV
工具正常运行。您可以将namedWindow
和imshow
替换为imwrite
。 OpenCV
构建过程并查找特定的Qt
选项。如果您使用的是CMake
,请查找With Qt
切换和相关的Qt
路径。答案 1 :(得分:0)
我遇到了同样的问题。简单的答案是-使用Qt调用进行事件处理和绘制图像。在Qt屏幕上显示CV矩阵相对简单。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if (argc != 2)
return -1;
MyWindow w{};
w.loadImage(argv[1]);
w.show();
return a.exec();
}
void MyWindow::loadImage(const char *path)
{
m_img = cv::imread(path, 1);
cv::cvtColor(m_img, m_img, cv::COLOR_BGR2GRAY);
}
void MyWindow::paintEvent(QPaintEvent *ev)
{
QPainter painter{this};
if (m_img.data)
{
QImage img{m_img.data, m_img.cols, m_img.rows, QImage::Format_RGB888};
painter.drawImage(QRectF(0, 0, 300, 300), img);
}
}
由于我没有进行深入研究,所以我仍然有一些伪像,但是您必须使用pixelformat来找到答案。否则,这将从cv :: Mat对象向Qt显示东西。