c++ qt opencv图像进行操作后利用线程存储图像
时间: 2023-05-21 21:01:00 浏览: 176
可以使用Qt的QThread类来实现线程存储图像,具体操作可以参考以下代码:
```c++
#include <QThread>
#include <opencv2/opencv.hpp>
class ImageThread : public QThread
{
Q_OBJECT
public:
ImageThread(cv::Mat image, QString filename)
: m_image(image), m_filename(filename)
{}
signals:
void imageSaved(QString filename);
protected:
void run() override
{
// 在子线程中进行图像处理
cv::cvtColor(m_image, m_image, cv::COLOR_BGR2GRAY);
// 存储图像
cv::imwrite(m_filename.toStdString(), m_image);
// 发送信号通知主线程图像已保存
emit imageSaved(m_filename);
}
private:
cv::Mat m_image;
QString m_filename;
};
```
在主线程中,可以这样使用:
```c++
cv::Mat image = cv::imread("image.jpg");
ImageThread* thread = new ImageThread(image, "image_gray.jpg");
connect(thread, &ImageThread::imageSaved, [=](QString filename) {
qDebug() << "Image saved:" << filename;
});
thread->start();
```
这样就可以在子线程中进行图像处理和存储,而不会阻塞主线程。
阅读全文