利用qt打开一张图片并转成灰度矩阵
首先是mat类,这个类的主要作用是构造一个容器,并将对应像素的灰度值放在容器内
#ifndef MAT_H
#define MAT_H
#include <vector>
#include <qimage.h>
#include <qstring.h>
class mat{
public:
mat(){}
mat(QImage &img):width(img.width()),
height(img.height()),_img(img){}
//构造函数,通过qt QImage类图片来完成mat类的初始化
void filldata();
//将QImage类图片内的数据转成灰度数据并附给mat类成员
QString print();
//将像素值转成Qstring对象,用于输出到label上
private:
int width;
int height;
QImage _img;
std::vector<int> data;
};
void mat::filldata()
{
for(int i=0;i<width;i++)
{ for(int j=0;j<height;j++)
{
data.push_back(qGray(_img.pixel(i,j)));
//最初在写这里的时候使用了Qrgb value =_img.pixel(i,j)
//data.push_back(qGray(value)),但是这样导致了所有灰度值均为0;
//目前还不知道原因
}
}
}
QString mat::print()
{
mat::filldata();
QString sdata;
for(int i=0;i<width;i++)
{
for(int j=0;j<height;j++)
{
sdata =sdata+" "+QString::number(data.at(i*height+j),10);
//i*height+j,将height和width转为一列
}
sdata =sdata+'\n';
}
return sdata;
}
#endif
上面的mat类简单的实现了将qt图片转成类似matlab数据的功能。后续计划重载各种运算符,让这个mat类能实现更多矩阵的运算。
这是qmainwindow,也就是主界面,用于交互
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qstring.h"
#include "qfiledialog.h"
#include "qmessagebox.h"
#include "mat.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QString filename;
filename = QFileDialog::getOpenFileName(this,tr("choose image"),"",tr(""));
if(filename.isEmpty())
{
return;
}
else
{
QImage* img = new QImage;
if(!(img->load(filename)))
{
QMessageBox::information(this,tr("open image failed"),
tr("open image failed"));
delete img;
return;
}
'''
ui->label->setScaledContents(true);
//这句可以让图片自动适应label的尺寸
'''
ui->label->setPixmap(QPixmap::fromImage(*img));
mat matrix(*img);
ui->label->setText(matrix.print());
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
利用qt打开一张图片并转成灰度矩阵的更多相关文章
- 发布利用 Qt Assistant来做帮助系统的程序遇到的问题
最近,一直在做反演初始模型可视化建模的软件 model Constraint,最后的步骤就是利用 Qt Assistant为自己的程序制作帮助系统. 1.<Qt Creator快速入门>和 ...
- QT打开ROS工作空间时遇到的问题和解决方法
之前一直觉得不用IDE写程序看着好像我很能的样子. 其实就相当于工业时代我还钻木取火并且告诉别人你们用打火机根本不知道火被点燃的过程是怎样的. 因为这个技能并非人人都会,就可以拿出去到处臭屁 好了, ...
- QT打开网页 QURL
用QT打开一个网页就是先定义一个QUrl对象url,然后利用QDesktopServices::open(url)即可. 例如: const QUrl url(http://www.baidu.com ...
- 利用Qt开发跨平台APP
本文将手把手教你如何在Windows环境下,使用Qt编译出安卓应用程序. Qt是一个优秀的跨平台开发工具.我们利用Qt可以很方便地将一次编写的应用,多次编译到不同平台上,如Windows.Linux. ...
- 利用Qt开发跨平台APP(二)(iOS,使用Qt5.9,很详细,有截图)
本文将手把手教你如何使用Qt编译出iOS应用程序. Qt是一个优秀的跨平台开发工具.我们利用Qt可以很方便地将一次编写的应用,多次编译到不同平台上,如Windows.Linux.MAC.Android ...
- 使用 Qt 获取 UDP 数据并显示成图片(2)
本文首发于 BriFuture 的 个人博客 在我的前一篇文章 使用 Qt 获取 UDP 数据并显示成图片 中,我讲了如何用 Python 模拟发送数据,如何在 Qt 中高效的接收 UDP 数据包并将 ...
- QT打开文件路径中含有中文和空格问题
使用qt-mingw版做的软件,发给客户以后说工作不正常,配置文件无法打开,或者加载数据文件不正常.远程查看以后,发现客户经常将程序放置在中文带空格的路径下,导致文件打开不正常.所以最近想在程序上解决 ...
- Qt 打开安卓相冊选择图片并获取图片的本地路径
Qt 打开安卓相冊选择图片并获取图片的本地路径 过程例如以下: 通过 Intent 打开安卓的系统相冊. 推荐使用 QAndroidJniObject::getStaticObjectField 获取 ...
- Linux 利用进程打开的文件描述符(/proc)恢复被误删文件
Linux 利用进程打开的文件描述符(/proc)恢复被误删文件 在 windows 上删除文件时,如果文件还在使用中,会提示一个错误:但是在 linux 上删除文件时,无论文件是否在使用中,甚至是还 ...
随机推荐
- 查看表空间信息SQL集合
1.查看表空间的名称及大小 SELECT t.tablespace_name as "表空间名", )), ) AS "所占物理空间M" FROM dba_ta ...
- iOS 开发之粒子效果
本文由糖炒小虾.Benna翻译 ,校对:sai.u0u0.iven.子龙山人 iOS 5中的UIKit粒子系统教程 Ray的话:这是第15篇.也是最后一篇<iOS 5 盛宴>中的iOS 5 ...
- iOS常见问题(3)
一.发现不少人在给成员变量初始化的时候,容易进错一个方法去初始化. //注意这个方法只有在内存发生警告的时候才会调用. - (void)didReceiveMemoryWarning { [super ...
- object to primitive in javascript
例1: var a={}; alert(a); //[object Object]; 例2: var a={ toString:function(){ return 1; } } alert(a); ...
- javascript之六种数据类型以及特殊注意点
在js中常见的六种数据类型:String类型.Null类型.Number类型.Boolean类型.Object类型. 1.typeof的注意点 涉及到数据类型,不免会提到,操作符 typeof.要注意 ...
- extern "C"——用“C”来规约在C++中用C的方式进行编译和链接
C++中的extern “C”用法详解 extern "C"表明了一种编译规约,其中extern是关键字属性,“C”表征了编译器链接规范.对于extern "C& ...
- Ubuntu 常用软件安装方法
macubuntu 安裝方法: $wget https://github.com/downloads/ChinaLuo/Mac_Ubuntu/Mac_Ubuntu-12.04.tar.gz -O /t ...
- 配置 RAILS FOR JRUBY1.7.4
1. 去JRUBY官方网站下载JRUBY http://www.jruby.org/ 目前最新版本是1.7.4,解压到C:\目录下 2. 设置环境变量 JRUBY_HOME = C:\jruby-1. ...
- 在云服务器搭建WordPress博客(四)WordPress的基本设置
前面说了 如何安装WordPress,接下来我们需要快速熟悉WordPress,以及进行一些必要的基本设置. 开始设置之前,建议大家先点击一篇左边菜单栏的每一个选项,看看到底是做什么用的.下面开始说一 ...
- JSON-JObject
http://james.newtonking.com/json/help/index.html http://www.cnblogs.com/usharei/archive/2012/04/24/2 ...