多种GUI对图像进行简单操作(qt【linux和win7环境】、MFC、MATLAB)
来源:互联网 发布:魔兽对战平台mac版 编辑:程序博客网 时间:2024/04/28 22:40
环境:linux+qtcreator2.3+opencv2.31
1.配置好Creator环境
2.新建工程
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<<name<<endl; 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<<"hight is "<<hight<<" width is"<<width<<endl; 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));}
QT文件选择对话框获取文件名
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();
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 guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = cvshowTEMPLATE = appSOURCES += main.cpp\ mainwindow.cppHEADERS += mainwindow.hFORMS += mainwindow.uiINCLUDEPATH += G:\opencv2410\build\includeCONFIG(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 \}
环境:Win7+VS2010+Opencv2.4.10
MFC:
需要将图像转换成CvvImage格式
文件选择对话框
OPENFILENAME ofn ;// a another memory buffer to contain the file namechar szFile[100] ;
// open a file nameTCHAR szFile[100] = {0};//GetWindowText(szFile, _countof(szFile));ZeroMemory( &ofn , sizeof( ofn));ofn.lStructSize = sizeof ( ofn );ofn.hwndOwner = NULL ;ofn.lpstrFile = szFile ;ofn.lpstrFile[0] = '\0';ofn.nMaxFile = sizeof( szFile );ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";ofn.nFilterIndex =1;ofn.lpstrFileTitle = NULL ;ofn.nMaxFileTitle = 0 ;ofn.lpstrInitialDir=NULL ;ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST ;GetOpenFileName( &ofn ); // Now simpley display the file name//MessageBox ( NULL , ofn.lpstrFile , "File Name" , MB_OK);std::cout<<ofn.lpstrFile<<std::endl;TRACE( "图片路径:%s\n",ofn.lpstrFile); //MFC程序不存在控制台,需要用TRACE输出cv::Mat image =cv::imread(ofn.lpstrFile);
MATLAB+GUI
打开文件对话框:uigetfile
[filename,pathname]=uigetfile({'*.*';'*.jpg';'*.bmp';'*.gif'},'选择图片');if isequal(filename,0) disp('Users Selected Canceled');elsestr=[pathname filename];im = imread(str);imshow(im);
0 0
- 多种GUI对图像进行简单操作(qt【linux和win7环境】、MFC、MATLAB)
- matlab对图像进行循环读取、改名、阈值化、缩放等简单操作
- 利用Matlab对图像进行简单的预处理
- matlab对图像进行重命名
- Matlab fspecial和imfilter对图像进行空间滤波
- 使用matlab对图像进行二值化和灰度化处理
- Linux之ubuntu学习笔记(三):对文件和文件夹进行简单的操作
- 对matlab GUI程序简单加密
- SVM+HOG对图像进行分类(MATLAB实现)
- matlab GUI 简单样本标注操作
- 用matlab对图像进行平滑处理
- MATLAB中对视频进行提取图像
- matlab对图像进行直方图均衡化
- 用matlab对图像进行批量旋转
- 用MATLAB对图像进行采样处理
- 用MATLAB对图像进行量化处理
- matlab对图像进行区域分块----imgSegFix
- 利用matlab对rgb图像进行裁剪
- 软件工程(C编码实践篇)
- Android 改变顶部状态栏的颜色
- 用深度优先和广度优先遍历文件夹下符合条件的文件
- 参与流片是一种怎样的体验?
- API
- 多种GUI对图像进行简单操作(qt【linux和win7环境】、MFC、MATLAB)
- pthread_create 未定义的引用
- 设计一个模块,功能是列出系统中所有内核线程的程序名、PID号和进程状态。
- Cacti-rrd安装
- 14,include全面解刨
- 个人博客&作业部落
- 如何给MFC的菜单项添加快捷键。
- oc语言中的isa指针以及其面向对象语言的设计原理
- 笔记三(创建一个旋转动画)