IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> OpenCV学习(7) -> 正文阅读

[人工智能]OpenCV学习(7)

HighGUI图形用户界面初步:图像的载入、显示和输出到文件(详细分析);图像混合(示例代码)?

一,opencv命名空间

OpenCV中的C++类和函数都是定义在命名空间cv之内的,有两种方法可以访问:第一种,是在代码开头的适当位置加上 usingnamespace cv;这句代码,规定程序位于此命名空间之内;另外一种,是在使用OpenCV的每一个类和函数时,都加入cv.命名空间。不过这种情况会很繁琐,每用一个OpenCV的类或者函数,都要多敲四下键盘写出cv::。所以,推荐大家在代码开头的适当位置,加上 usingnamespace cv;这句。
比如在写简单的OpenCV程序的时候,以下三句可以作为标配:

#include <opencv2 / core/core.hpp>
#include<opencv2 / highgui / highgui.hpp>

using namespace cv ;

二,Mat类简析

Mat类是用于保存图像以及其他矩阵数据的数据结构,默认情况下其尺寸为0。我们也可以指定其初始尺寸,比如定义一个 Mat类对象,就要写 cv:Mat pic(320,640,cv::Scalar(100));
三,图像的载入与显示(imread()函数 与 imshow函数)

1.载入 imread函数

imread函数,其用于读取文件中的图片到OpenCV 中。可以在OpenCV官方文档中查到它的原型,如下。
Mat imread (const string& filename,intflags=1 );
(1)第一个参数,const string&类型的 filename,填我们需要载入的图片路径名。在 Windows操作系统下,OpenCV 的imread函数支持如下类型的图像载入。
Windows位图:*.bmp,*.dib
JPEG文件:*.jpeg, *.jpg, *.jpeJPEG 2000文件:*.jp2
PNG图片:*.png
便携文件格式:*.pbm, *.pgm, *.ppmSun rasters光栅文件:*.sr,*.ras.TIFF文件:*.tiff,*.tif
(2)第二个参数,int类型的flags,为载入标识,它指定一个加载图像的颜色类型。可以看到它自带默认值1,所以有时候这个参数在调用时可以忽略。在看了下面的讲解之后,我们就会发现,如果在调用时忽略这个参数,就表示载入三通道的彩色图像。这个参数可以在OpenCV中标识图像格式的枚举体中取值。

因为 flags是 int型的变量,若我们不在这个枚举体中取固定的值,可以这样进行:
flags >0返回一个3通道的彩色图像; flags =0返回灰度图像;
?flags <0返回包含Alpha通道的加载图像。
下面是一个载入示例:

Mat image0=imread("1.jpg",2 ( 4);//载入无损的源图像Mat imagel=imread("1.jpg", 0);//载入灰度图
Mat image2=imread ("1.jpg" ,199);//载入3通道的彩色图像
2.显示:imshow函数

imshow()函数用于在指定的窗口中显示一幅图像,函数原型如下。
void imshow (const string& winname,InputArray mat) ;
第一个参数: const string&类型的winname,填需要显示的窗口标识名称。第二个参数: InputArray类型的mat,填需要显示的图像。
四,创建窗口:nameWindow()函数

namedWindow函数用于创建一-个 窗口。若是简单地进行图片显示,可以略去namedWindow函数的调用,即先调用imread读入图片,然后用imshow直接指定出窗口名进行显示即可。但需要在显示窗口之前就用到窗口名时,比如我们后面会马上讲到滑动条的使用,要指定滑动条依附到某个窗口上,就需要namedWindow函数先创建出窗口,显式地规定窗口名称了。namedWindow的函数原型如下:
void namedWindow (const string& winname, int flags=WINDOW_ AUTOSIZE );
第一个参数, const string&型的name,填写被用作窗口的标识符的窗口名称。
五,输出图像到文件:imwrite()函数

在OpenCV中,输出图像到文件一般采用imwrite函数,它的声明如下。bool imwrite(const string& filename,InputArray img,const vector<int>& params=vector<int> () );
(1)第一个参数,const string&类型的filename,填需要写入的文件名。注意要带上后缀,如“123.jpg”。
(2)第二个参数,InputArray类型的 img,一般填一个Mat类型的图像数据。

(3)第三个参数,const vector<int>&类型的 params,表示为特定格式保存的参数编码。它有默认值vector<int>(),所以一般情况下不需要填写。

? ? ?六,示例代码

主要是演示如何载入图像,进行简单的图像混合,然后显示图像:

代码如下:

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>//opencv highgui 头文件
#include<opencv2/imgproc/imgproc.hpp>//opencv 图像处理头文件
#include <opencv2/core/utils/logger.hpp>
#include<iostream>
using namespace cv;
int main()
{
	cv::utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//控制台不在输出日志文件
	//一、图像的载入和显示--//描述:以下三行代码用于完成图像的载入和显示
	Mat girl = imread("E:/pictures/12.png");//载入图像
	namedWindow("【 1】动漫图");//创建一个名为"【1】动漫图"的窗口
	imshow("【 1】动漫图", girl);//显示名为"【1】动漫图"的窗口
//二,初级图像混合
	Mat image = imread("E:/pictures/2.1.png");
	Mat logo = imread("E:/pictures/3.1.png",20);
	//载入后先显示
	namedWindow("【2】原画图");
	imshow("【2】原画图", image);
	namedWindow("【 3 ] logo图");
	imshow("【 3 ] logo图", logo);
	//定义一个Mat类型,用于存放,图像的ROI
	Mat imageROI;
	// 方法一
	imageROI = image(Rect(800, 350, logo.cols, logo.rows));
	//方法二
   //将logo加到原图上
	addWeighted(imageROI,0.5,logo,0.5,0.,imageROI);
	// 显示结果
	namedWindow(" 【 4】原画+logo图");
	imshow(" 【 4】原画+logo图", image);
	//三、图像的输出
	// 描述; 将一个Mat图像输出到图像文件
	//输出一张jpg图片到工程目录下
	imwrite("由imwrite生成的图片.jpg", image);
	waitKey();
	return 0;
}

运行截图如下:

?在这里,需要注意的是rect和addWeighted函数的理解。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-11 23:59:55  更:2022-01-12 00:02:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 22:22:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码