将Mat类型转换成QImage类型
ui

头文件
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/core/core.hpp>
using namespace cv;
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
void Mat2QImage(Mat image);
// void salt(Mat &image, int n);
// void colorReduce(Mat image,int div); private slots:
void on_pushButton_clicked();
private:
Ui::Dialog *ui;
Mat img;
QImage qimg;
};
#endif // DIALOG_H
源文件
#include "dialog.h"
#include "ui_dialog.h" #include <QFileDialog> Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_pushButton_clicked()
{
QString filename= QFileDialog::getOpenFileName(this,tr("choose image"),QDir::currentPath());//父窗口 窗口名 路径 img=imread(filename.toAscii().data());
Mat2QImage(img);
}
void Dialog::Mat2QImage(Mat image)
{
//图片的显示主要问题还是在于QImage与Mat格式的不同,其中QImage是RGB排列,而Mat 是 BGR,
//同时两者格式包含的内容页不同,因此需要经过转换才能够显示。
Mat rgb;
QImage img;
//salt(image ,100000);
// colorReduce(image,64); if(image.channels()==3)
{
//cvt Mat BGR 2 QImage RGB
cvtColor(image,rgb,CV_BGR2RGB);
img =QImage((const unsigned char*)(rgb.data),
rgb.cols,rgb.rows,
rgb.cols*rgb.channels(),
QImage::Format_RGB888);
}
else
{
img =QImage((const unsigned char*)(image.data),
image.cols,image.rows,
image.cols*image.channels(),
QImage::Format_RGB888);
}
//ui->label->setPixmap(QPixmap::fromImage(img)); //QImage转换为QPixmap
//ui->label->resize(ui->label->pixmap()->size());
QImage imgScaled ;
imgScaled = img.scaled(ui->label->size(),Qt::KeepAspectRatio);//默认保持原图的宽高比 以label大小为大小
ui->label->setPixmap(QPixmap::fromImage(imgScaled)); } void Dialog::salt(cv::Mat &image, int n)
{
int i,j;
for (int k=0; k<n; k++)
{
i= qrand()%image.cols;
j= qrand()%image.rows;
if (image.channels() == 1) { // gray-level image
image.at<uchar>(j,i)= 255;
} else if (image.channels() == 3)
{ // color image
/* 注意 Mat::at 函数是个模板函数, 需要指明参数类型, 因为这张图是具有红蓝绿三通道的图,
所以它的参数类型可以传递一个 Vec3b, 这是一个存放 3 个 uchar 数据的 Vec(向量). 这里
提供了索引重载, [2]表示的是返回第三个通道, 在这里是 Red 通道, 第一个通道(Blue)用[0]返回 */
image.at<cv::Vec3b>(j,i)[0]= 255;//白点;
image.at<cv::Vec3b>(j,i)[1]= 255;
image.at<cv::Vec3b>(j,i)[2]= 255;
}
}
}
void Dialog::colorReduce(Mat image, int div)
{
int nl= image.rows; // number of lines
int nc= image.cols * image.channels(); // total number of elements per line
for (int j=0; j<nl; j++)
{
uchar* data= image.ptr<uchar>(j);//获取每一行开始处的指针
for (int i=0; i<nc; i++)
{
// process each pixel ---------------------
data[i]= data[i]/div*div+div/2;
// end of pixel processing ----------------
} // end of line
}
}
colorReduce之后



将Mat类型转换成QImage类型的更多相关文章
- C# 字符串string类型转换成DateTime类型 或者 string转换成DateTime?(字符串转换成可空日期类型)
在c#中,string类型转换成DateTime类型是经常用到的,作为基本的知识,这里在此做个小结.一般来说可以使用多种方法进行转换,最常用的就是使用Convert.ToDateTime(string ...
- Object类型转换成自定义类型(向下转型)
Object类型转换成自定义类型 场景: 从数据库或者别的途径接收对象的时候用Object,但是用的时候怎么object点(方法提示 | alt+'/'),都点不出自定义类型的方法. 比如,数据库查询 ...
- sqlserver搜索中怎么把varchar类型转换成numeric类型
sqlserver搜索中怎么把varchar类型转换成numeric类型 可以用cast来转换 如:列名叫grade,表名为A select cast(grade as numeric(y,x)) f ...
- Java byte类型转换成int类型时需要 & 0XFF的原因
Java byte类型转换成int类型时需要 & 0XFF的原因 假设有byte b = -1; 那么b的二进制是:1111 1111. 如果将b直接转换为int类型,那么二进制是 1111 ...
- oracle Clob类型转换成String类型
转载:https://www.cnblogs.com/itmyhome/p/4131339.html Clob类型转换成String类型 oracle中表结构如下: create table GRID ...
- 基本类型转换成NSNumber类型
int i=100; float f=2.34; NSNumber *n1=[NSNumber numberWithInt:i]; NSNumber *n2=[NSNumber numberWithF ...
- C#String类型转换成Brush类型
C#String类型转换成Brush类型: using System.Windows.Media; BrushConverter brushConverter = new BrushConverter ...
- Clob类型转换成String类型
oracle中表结构如下: create table GRID_RESOURCE ( ID VARCHAR2(50), CNNAME VARCHAR2(50), TYPE VARCHAR2(50), ...
- Oracle timestamp类型转换成date类型
今天需要根据时间判断,统一修改某一个字段的数据.然后打开数据库发现,时间类型为timestamp类型.如下: 然后呢,这对我不是喝口水就可以解决的问题吗? 解决方案如下:我需要改这张表某个字段的内容, ...
随机推荐
- 转:Eric Lippert:阅读代码真的很难
转自:http://blog.jobbole.com/438/ 相关文章 微软资深软件工程师:阅读代码真的很难(第2篇) 阅读优秀代码是提高开发人员修为的一种捷径 学会阅读源代码 如何阅读大型代码库? ...
- mybatis动态sql中foreach标签的使用
foreach标签主要用于构建in条件,他可以在sql中对集合进行迭代.如下: <delete id="deleteBatch"> delete from user w ...
- SQL数据库基本操作语句
一.数据库及数据库表定义 1.创建基本表 create table <表名> (<列名><数据类型>[列级完整性约束条件] ...
- JAVA EE 第一阶段项目问题
一: 乱码 原因: 由于同组的其他同学的myeclipse默认的编码方式是GBK,而我的默认的是UTF-8.所以当我使用svn把其他同学提交到组长那里去的代码下载下来的时候,就全乱码了! 解决问题: ...
- hiho_1050_树中的最长路
题目大意 给出一棵树,其中每两个节点都可以形成一个路径(要求路径中的边只能走一次),求出所有路径中的长度最大值. 分析 树形结构,很容易想到递归,但为了节省时间,要考虑保存中间状态.于是,考虑使用记忆 ...
- RecyleView
RecyclerView是经典的ListView的进化与升华,它比ListView更加灵活,但也因此引入了一定的复杂性. 我们知道,ListView通过使用ViewHolder来提升性能.ViewHo ...
- easyui 查询
<fieldset> <legend>查询</legend> <table style="width: 100%;"> <tr ...
- matlab中图像显示函数
image函数是显示图像的最基本的方法.该函数还产生了图像对象的句柄,并允许对对象的属性进行设置. imagesc函数也具有image的功能,所不同的是imagesc函数还自动将输入数据比例化,以全色 ...
- 第二章 Python基本元素:数字、字符串和变量
Python有哪些内置的数据类型: True False #布尔型 42 100000000 #整型 3.14159 1.0e8 #浮点型 abcdes #字符串 2.1 变量.名字和对象 pytho ...
- Webdriver - Selenium Grid Configuration
Grid parameter: role = <hub|node> (default is no grid, just run an RC/webdriver server). When ...