首页 > 解决方案 > 如何调整 cv::Mat 的大小以便将其用于 Qlabel(我的程序抛出 SIGSEV)

问题描述

调整 cv::Mat 的大小并尝试将其用于 Qlabel 中的像素图时,我遇到了问题。

如果我调整垫子的大小并且不将其用于 Qlabel,则程序可以正常工作,如果我不调整垫子的大小并将其用于具有该大小的像素图,它也可以正常工作。当我出于任何我不明白的原因尝试同时做这两个时,问题就来了。

根据调试,我在这里收到了 SIGSEV(从我的 mainWindow 到最深的错误):

void MainWindow::print_img(const QImage &img)
{
    ui->map->setPixmap(QPixmap::fromImage(img.rgbSwapped()));
}

---------
    QImage rgbSwapped() const &
        { return rgbSwapped_helper(); }

---------
res = QImage(d->width, d->height, d->format);

---------

QImage::QImage(int width, int height, Format format)
    : QImage(QSize(width, height), format)

---------

d = QImageData::create(size, format);

---------

d->data  = (uchar *)malloc(d->nbytes);

在此先感谢您的帮助。

标签: c++qtopencv

解决方案


我通过将地图(我从中获取图像)从类变量移动到 run() 函数来解决它,所以我不必调整地图的大小。


推荐阅读