首页 > 其他分享 >图像处理的基本操作

图像处理的基本操作

时间:2023-12-15 21:33:39浏览次数:42  
标签:1.1 image cv2 jpg 像素 图像处理 图像 基本操作

图像处理最基本的操作,包括读取图像、显示图像、保存图像、获取图像属性等。下面将依次讲解这4个内容。

1  读取图像

OpenCV提供了用于读取图像的imread()方法,其语法格式如下:

image = cv2.imread(filename, flags)

  

参数说明:

l  image:是imread()方法的返回值,返回的是读取到的图像。

l  filename:要读取的图像的完整文件名。例如,要读取当前项目目录下的1.1.jpg,filename的值为"1.1.jpg"(双引号是英文格式的)。

l  flags:读取图像颜色类型的标记。当flags的默认值为1时,表示读取的是彩色图像,此时的flags值可以省略;当flags的值为0时,表示读取的是灰度图像(如果读取的是彩色图像,也将转换为与彩色图像对应的灰度图像)

实例1  读取当前项目目录下的图像

在PyCharm中的PythonDevelop项目下,有一幅名为1.1.jpg的图像,如图22所示。在ImageTest.py文件中,先使用imread()方法读取1.1.jpg,再使用print()方法打印1.1.jpg。代码如下:

import cv2

 

# 读取1.1.jpg,等价于image = cv2.imread("1.1.jpg",1)

image = cv2.imread("1.1.jpg")

print(image) # 打印1.1.jpg

  

上述代码打印的部分结果如图22所示。

       

图22  PythonDevelop项目下的1.1.jpg

 

 图23  打印1.1.jpg

说明:图23输出的数字是1.1.jpg的部分像素值。有关像素和像素值的内容,将在本书的第2章进行讲解。

如果1.1.jpg在D盘的根目录下,应该如何使用imread()方法进行读取呢?只需将实例1第4行代码:

image = cv2.imread("1.1.jpg")

  

修改为如下代码:

image = cv2.imread("D:/1.1.jpg") # 路径中不能出现中文

  

注意:"D:/1.1.jpg"等价于"D:\\1.1.jpg"。

2  显示图像

相比图23中密密麻麻的数字,将图像显示出来,效果会更加直观。为此,OpenCV提供了imshow()方法、waitKey()方法和destroyAllWindows()方法。

(1)imshow()方法用于显示图像,其语法格式如下:

cv2.imshow(winname, mat)

  

参数说明:

l  winname:显示图像的窗口名称。

l  mat:要显示的图像。

(2)waitKey()方法用于等待用户按下键盘上按键的时间。当用户按下键盘上的任意按键时,将执行waitKey()方法,并且获取waitKey()方法的返回值。其语法格式如下:

retval = cv2.waitKey(delay)

  

参数说明:

l  retval:与被按下的按键相对应的ASCII码。例如,Esc键的ASCII码是27,当用户按下【Esc】键时,waitKey()方法的返回值是27。如果没有按键被按下,waitKey()方法的返回值是-1。

l  delay:等待用户按下键盘上按键的时间,单位为毫秒(ms)。当delay的值为负数、0或者为空时,表示无限等待用户按下键盘上按键的时间。

(3)destroyAllWindows()方法用于销毁所有正在显示图像的窗口,其语法格式如下:

cv2.destroyAllWindows()

  

实例2  显示图像

编写一个程序,使用imread()方法、imshow()方法、waitKey()方法和destroyAllWindows()方法,读取并显示PythonDevelop项目下的1.1.jpg。代码如下:

import cv2

 

image = cv2.imread("1.1.jpg") # 读取1.1.jpg

cv2.imshow("flower", image) # 在名为flower的窗口中显示1.1.jpg

cv2.waitKey() # 按下任何键盘按键后

cv2.destroyAllWindows() # 销毁所有窗口

  

上述代码的运行结果如图24所示。

图24  显示1.1.jpg

注意:(1)显示图像的窗口名称不能是中文(例如,把实例2第5行代码中的"flower"修改为"鲜花"),否则会出现如图25所示的乱码。

(2)为了能够正常显示图像,要在cv2.imshow()之后紧跟着cv2.waitKey()。

图25  窗口名称是中文时出现乱码

依据imread()方法的语法,如果把实例2第4行代码:

image = cv2.imread("1.1.jpg")

  

修改为如下代码:

image = cv2.imread("1.1.jpg", 0)

  

即可得到由1.1.jpg转换得到的灰度图像,如图26所示。

图26  由1.1.jpg转换得到的灰度图像

如果想设置窗口显示图像的时间为5s,又该如何编写代码呢?只需将实例2第6行代码:

cv2.waitKey()

  

修改为如下代码:

cv2.waitKey(5000) # 1000ms为1s,5000ms为5s

 

3  保存图像

OpenCV提供了用于按照指定路径保存图像的imwrite()方法,其语法格式如下:

cv2.imwrite(filename, img)

参数说明:

l  filename:保存图像时所用的完整路径。

l  img:要保存的图像

实例3  保存图像

编写一个程序,把PythonDevelop项目下的1.1.jpg保存为E盘根目录下的、Pictures文件夹中的1.jpg。代码如下:

import cv2

image = cv2.imread("1.1.jpg") # 读取1.1.jpg

# 把1.1.jpg保存为E盘根目录下的、Pictures文件夹中的1.jpg

cv2.imwrite("E:/Pictures/1.jpg", image)

  

运行上述代码前,要确认E盘根目录下是否有Pictures文件夹。如果没有,要在E盘根目录下新建一个空的Pictures文件夹。运行上述代码后,打开E盘根目录下的Pictures文件夹,即可看到1.jpg,如图27所示。

图27  E盘根目录下的、Pictures文件夹中的1.jpg

4  获取图像属性

处理图像的过程中,经常需要获取图像的大小、类型等图像属性。为此,OpenCV提供了shape、size和dtype这3个常用属性。这3个常用属性的具体含义分别如下:

l  shape:如果是彩色图像,那么获取的是一个包含图像的水平像素、垂直像素、通道数的数组,即(垂直像素、水平像素、通道数);如果是灰度图像,那么获取的是一个包含图像的水平像素、垂直像素的数组,即(垂直像素,水平像素)。

说明:垂直像素指的是垂直方向上的像素,水平像素指的是水平方向上的像素。有关像素、灰度图像和通道的内容,将在本书的第2章进行讲解。

l  size:获取的是图像包含的像素个数,其值为“水平像素 × 垂直像素 × 通道数”。(灰度图像的通道数为1)

l  dtype:获取的是图像的数据类型。

实例4  分别获取彩色图像和灰度图像的属性

编写一个程序,先获取PythonDevelop项目下的1.1.jpg的属性,再获取由1.1.jpg转换得到的灰度图像的属性。代码如下:

 import cv2

 

image_Color = cv2.imread("1.1.jpg") # 读取1.1.jpg

print("获取彩色图像的属性:")

print("shape =", image_Color.shape) # 打印彩色图像的(垂直像素,水平像素,通道数)

print("size =", image_Color.size) # 打印彩色图像包含的像素个数

print("dtype =", image_Color.dtype) # 打印彩色图像的数据类型

image_Gray = cv2.imread("1.1.jpg", 0) # 读取与1.1.jpg(彩色图像)对应的灰度图像

print("获取灰度图像的属性:")

print("shape =", image_Gray.shape) # 打印灰度图像的(垂直像素,水平像素)

print("size =", image_Gray.size) # 打印灰度图像包含的像素个数

print("dtype =", image_Gray.dtype) # 打印灰度图像的数据类型

  

 

上述代码的运行结果如图28所示。

图28  获取并打印彩色图像的属性

 

说明:图28代码中“(292, 219, 3)”的含义是1.1.jpg的垂直像素是292,水平像素是219,通道数是3;“(292, 219)”的含义是由1.1.jpg转换得到的灰度图像的垂直像素是292,水平像素是219,通道数是1。

标签:1.1,image,cv2,jpg,像素,图像处理,图像,基本操作
From: https://www.cnblogs.com/flyingsir/p/17904213.html

相关文章

  • 智能计算与图形图像处理Intelligent Computing and Graphics and Image Processing
      智能算法IntelligenceAlgorithms图形图像处理Graphics&ImageProcessing机器视觉machinevision计算机视觉computervision 计算机视觉(computervision),用计算机来模拟人的视觉机理获取和处理信息的能力。就是是指用摄影机和电脑代替人眼对......
  • 函数实现一维数组基本操作
    论如何用一个代码实现一堆数字的排序,删除,插入,查找。这当然少不了我们在数组上的操作,将这些看成一个个小功能,接下来我们为了使结构直观,这里我用函数来实现这些功能首先是声明//功能voidFunction();//排序voidSort(inti,intnum);//查找voidFind(intz);//插入voidIn......
  • C++中的图像处理与变换总结
    个人总结图像加法去噪是对同一场景的多幅图像求平均值,以降低加性随机噪声。随机噪声在不同的图像中是独立的,而场景信息是相同的。因此,通过将多幅图像相加并求平均,可以使场景信息保持不变,而噪声的影响则会减小。这是因为随机噪声的期望值为零,所以多幅图像的平均值会使噪声趋向于零......
  • 嵌入式图像处理:算法、应用与性能优化
    嵌入式系统在现代科技中扮演着重要的角色,广泛应用于医疗设备、汽车、工业控制、智能家居等领域。嵌入式图像处理作为其中的一个关键组成部分,为许多应用提供了视觉感知能力。本文将介绍嵌入式图像处理的算法、应用以及性能优化方法,并提供相关的代码示例。嵌入式图像处理算法图像采集......
  • [数字图像处理笔记] 第六章 图像复原
    1.图像复原及退化模型1.1图像复原图像复原:根据退化原因,建立相应的数学模型,从被污染或畸变的图像信号中提取所需要的信息,沿着使图像降质的逆过程恢复图像本来面貌。根据不同指标进行分类:在给定退化模型条件下:无约束和有约束根据是否需要外界干预:自动和交互根据处......
  • [数字图像处理笔记] 第四章 图像变换
    1.连续傅里叶变换1.1一维连续傅里叶变换一维连续傅里叶正变换(\(\text{1-DimensionalContinuousFourierTransform}\))对于函数\(f(x)\),一维连续傅里叶变换有如下定义:\[\Re:\;F(u)=\int_{-\infty}^{\infty}f(x)e^{-j2\piux}\text{d}x\]其中\(j^2=1\).一......
  • 2020年初一初二集训队(线段树) 基本操作
    其他线段树详解与实现-知乎⁤(zhihu.com)线段树-OIWiki(oi-wiki.org) 线段树学习笔记-xujindong的博客-洛谷博客(luogu.com.cn)  简介线段树(segmenttree)是一种二叉搜索树,也是平衡二叉树,它的每一个结点对应一个区间[L,R],叶子结点对应的区间只有一个......
  • [数字图像处理笔记] 第二章 数字图像处理基础
    1.数字图像处理基础知识1.1图像数字化及表达1.1.1图像数字化将代表图像的连续(模拟)信号转换为离散(数字)信号的过程。1.1.2图像表达任一幅图像,根据它的光强度(亮度、密度或灰度)的空间分布,均可以用下面的函数形式来表达:\[I=f(x,y,z,\lambda,t)\]数字图......
  • [数字图像处理笔记] 第一章 概述
    1.数字图像处理及特点1.1基本概念图物体反射或者透射电磁波的分布像人的视觉系统对接收的图信息在大脑中形成的印象图像“图”和“像”的结合,可以直接或间接作用于人的视觉系统而产生的视知觉实体图像处理模拟图像处理也称光学图像处理,是利用光学透镜或光......
  • 使用百度完成gui的图像处理(需要下载百度的javasdk文档,主要工具带代码在sdk之中,以下代
    packageGui;importcom.baidu.aip.imageprocess.AipImageProcess;importorg.json.JSONObject;importjavax.imageio.ImageIO;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.i......