OpenCV Mat导致SIGABRT崩溃
OpenCV Mat causes Crash with SIGABRT
我通过创建一个50x50的单通道矩阵来测试Mat类的功能,该矩阵一旦显示,应该会显示黑色图片。不幸的是,我的程序在以下代码的第3行崩溃:
cv::Mat projImg = cv::Mat::zeros(50, 50, CV_8U);
cv::namedWindow( "Test");
cv::imshow("Test", projImg);
带有错误的下级程序停止了,因为它收到了来自操作系统的信号。信号名称:SIGABRT。这很奇怪,因为这段代码非常简单。
我正在运行Ubuntu 16.04 64位Qt 4.0.2。
的被害者。我得到同样的错误,即使投影设置为常规图像
cv::Mat projImg = cv::imread("/home/is/Downloads/test.jpg");
您的OpenCV
基本功能不太可能出现故障。因此,您的OpenCV
可能没有配置为使用Qt
支持构建。
检查表:
- 消除所有
highgui
方法,以确保核心OpenCV
工具正常工作。您可以用imwrite
替换namedWindow
和imshow
。 - 再次检查
OpenCV
构建过程并查找特定的Qt
选项。如果你使用CMake
,寻找With Qt
切换和相关的Qt
路径。
我也有同样的问题。简单的答案是——使用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);
}
}
我仍然有一些文物,因为我没有深入调查,但你必须玩像素格式找到答案。否则,这将显示cv::Mat对象中的东西给Qt。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 相机崩溃:带JNI代码的致命信号6(Sigabrt)
- 无法弄清楚导致此崩溃的原因(SIGABRT)
- 应用程序在访问主运行循环时崩溃 (SIGABRT)
- OpenMAX AL在信号6 (SIGABRT)时崩溃.媒体服务器死亡
- C++11 std::线程联接崩溃,Xcode 6上出现system_error异常和SIGABRT
- OpenCV Mat导致SIGABRT崩溃