环境:linux+qtcreator2.3+opencv2.3.1
1.配置好Creator环境
2.新建qt工程
3.配置pro文件,将opencv库路径添加到pro中
4.编辑ui界面文件,
绘制2个按钮和2个label,保存文件
右键添加槽函数
实现:
void MainWindow::on_openPushButton_clicked()
{
QString filename = QFileDialog::getOpenFileName(this,tr("Open Image"),"",tr("Image File(*.bmp *.jpg *.jpeg *.png *.ico)"));
QTextCodec *code = QTextCodec::codecForName("gb18030");
std::string name = code->fromUnicode(filename).data();
cout<
origin_image= cv::imread(name,1);
if(!origin_image.data)
{
QMessageBox msgBox;
msgBox.setText(tr("image data is null"));
msgBox.exec();
}
else
{
int hight =ui->label->height();
int width =ui->label->width();
cout<
cv::resize(origin_image,processed_image,cv::Size(width,hight));
cv::cvtColor(processed_image,processed_image,CV_BGR2RGB);
cv::imshow("origin_image",origin_image);
cv::imshow("processed_image",processed_image);
img = QImage((const unsigned char*)(processed_image.data),processed_image.cols,processed_image.rows,QImage::Format_RGB888);
ui->label->clear();
ui->label->setPixmap(QPixmap::fromImage(img));
ui->processPushButton->setEnabled(true);
// ui->label->resize(ui->label->pixmap()->size());
}
}
void MainWindow::on_processPushButton_clicked()
{
//cv::Sobel(processed_image,processed_image,CV_8U,1,0);
cv::flip(processed_image,processed_image,1);
//cv::cvtColor(processed_image,processed_image,CV_BGR2RGB);
img = QImage((const unsigned char*)(processed_image.data),processed_image.cols,processed_image.rows,QImage::Format_RGB888);
ui->label2->clear();
ui->label2->setPixmap(QPixmap::fromImage(img));
ui->processPushButton->setEnabled(true);
//ui->label2->resize(ui->label->pixmap()->size());
ui->label2->setPixmap(QPixmap::fromImage(img));
}
4、实现效果:
发现有些图显示正常,而有些图和原图对比失真严重
原因在于图像在存储数据时的方式:opencv在存储图像宽度不是4的倍数时,对图像行进行了填补格式,以4补齐。这样如果Qimage的宽度不是4的倍数时会造成图像显示不正常。将Qimage宽度调整为4的倍数即可显示正常,这里对原图像进行了缩放,将其缩放成lable的大小,使label的宽度为4的倍数即可。另外
QImage是RGB排列,而Mat 是 BGR,在显示时需要进行转换。
cv::cvtColor(processed_image,processed_image,CV_BGR2RGB);
img = QImage((const unsigned char*)(processed_image.data),processed_image.cols,processed_image.rows,QImage::Format_RGB888);
路径包含中文时,无法读取图像。
环境:win7+qt5.51+opencv2.4.10
与linux下基本一样,将pro文件配置好即可。
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = cvshow
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
INCLUDEPATH += G:\opencv2410\build\include
CONFIG(release,debug|release){
LIBS += G:\opencv2410\build\x86\vc10\lib\opencv_calib3d2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_contrib2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_core2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_features2d2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_flann2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_gpu2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_highgui2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_imgproc2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_legacy2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_ml2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_nonfree2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_objdetect2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_photo2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_stitching2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_video2410.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_videostab2410.lib \
}
CONFIG(debug,debug|release){
LIBS += G:\opencv2410\build\x86\vc10\lib\opencv_calib3d2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_contrib2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_core2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_features2d2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_flann2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_gpu2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_highgui2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_imgproc2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_legacy2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_ml2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_nonfree2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_objdetect2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_photo2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_stitching2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_ts2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_video2410d.lib \
G:\opencv2410\build\x86\vc10\lib\opencv_videostab2410d.lib \
}