数字图像处理-实验1-图像处理基础

前提说明:

需要提前下载python并配置好环境,安装jupyter-lab环境,安装相关的绘图工具包。

jupyter-lab安装命令:

pip install numpymatplotlib-ihttp://pypi.douban.com/simple--trusted-host pypi.douban.com
pip install pandas scipy scikit-learn scikit-image-ihttp://pypi.douban.com/simple--trusted-host pypi.douban.com pipinstallopencv-python-ihttp://pypi.douban.com/simple --trusted-host pypi.douban.com
pipinstalljupyter-ihttp://pypi.douban.com/simple--trusted-host pypi.douban.com
pipinstalljupyterlab-ihttp://pypi.douban.com/simple --trusted-host pypi.douban.com

在程序目录上输入cmd进入命令行输入jupyter-lab命令启动Jupyter-Lab

基本使用方法在本平台或者bilibili都有相关教程

后续会添加有关实验部分的代码块(ps:代码敲一遍上手更快)


一、实验目的

(1)熟悉Python的编程运行环境及Python的基本语法;

(2)掌握应用OpenCV的基本图形图像处理函数;

(3)掌握应用Matplotlib的基本图形图像处理函数;

(4)掌握绘制简单图像的方法。

二、实验环境

(1)实验硬件环境

笔记本电脑Windows10操作系统

  1. 软件及工具包

开发环境是Python3,需要配置的数学运算库包括NumPy、Matplotlib、OpenCV,编辑器是jupyter notebook。

NumPy是 Python 语言的一个扩展程序库。其中提供了许多向量和矩阵操作,能轻松完成最优化、线性代数、积分、插值、特殊函数、傅里叶变换、信号处理和图像处理、常微分方程求解以及其他科学与工程中常用的计算,不仅方便易用而且效率更高。NumPy 是一个开源的Python科学计算基础库,是SciPy、Pandas等数据处理或科学计算库的基础。

Matplotlib是一个Python 的2D绘图库,Matplotlib也是Python中最常用的可视化工具之一,它的功能非常强大,可以通过调用函数轻松方便地绘制数据分析中常见的各种图像,比如折线图、条形图、柱状图、散点图、饼图等。

OpenCV 是一个的跨平台计算机视觉库,可以运行在 Linux、 Windows 和 Mac Os 操作系统上。它轻量级而且高效,由一系列 C 函数和少量 C++ 构成,同时也提供了 python 接口,实现了图像处理和计算机视觉方面的很多通用算法。

三、实验内容

(1)使用OpenCV的函数读取、显示并保存图像;

(2)使用Matplotlib的函数读取、显示并保存图像;

(3)完善代码,按要求绘制图形,并统计绘制其直方图。

四、实验程序及运行结果

  1. 实验代码:

import numpy as np
import cv2 as cv
lenna = cv.imread(r"Lenna.png")#读取图像
type(lenna)
lenna.shape#查看图片大小
cv.namedWindow("Lena",cv.WINDOW_NORMAL)
cv.imshow("Lena",lenna)#显示图像
cv.waitKey(100000)
cv.destroyWindow("Lena")#图像显示窗口关闭
cv.imwrite("test_imwirte.png",lenna,(cv.IMWRITE_PNG_COMPRESSION,9))#将压缩后的图像写入文件夹

     运行结果:

实验代码:

import cv2 as cv
import matplotlib.pyplot as plt
img_BGR = cv.imread("iris.jpg")#读取图片
img_RGB = cv.cvtColor(img_BGR,cv.COLOR_BGR2RGB)
plt.imshow(img_RGB)#显示图片
plt.show()
plt.savefig(fname="pic.png",figsize=[10,10])
plt.imshow(img_BGR)
plt.show()

     运行结果:

实验代码:

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
def creatBox():
    box = np.zeros((100,180),np.uint8)+250
    print(type(box))
    shape = box.shape
    for i in range(shape[0]):
        for j in range(shape[1]):
            if (i-50)**2+(j-50)**2<=50**2:#表示圆形区域
                box[i,j]=0#灰度值为0 显示黑色
            else:
                box[i,j]=250#剩余区域显示白色
            if j in range (80,180) and i in range(0,100):#表示正方形区域
                box[i,j]=150#灰度值为150 显示为灰色
    return box
image0=creatBox()
plt.imshow(image0,vmin=0,vmax=255,cmap=plt.cm.gray)

#统计各灰度值的像素个数
def histogram(image):
    (row, col) = image.shape
    hist = [0]*256
    for i in range(row):
        for j in range(col):
            hist[image[i,j]] +=1#遍历图片中每一点的像素值并统计
    return hist
image_hist0 = histogram(image0)
plt.bar(range(256),image_hist0)

    运行结果:

五、实验分析(对实验中出现的现象及遇到的问题进行分析、讨论,并对实验提出自己的建议和改进措施。)

验证一中的问题及改进措施:

图片显示窗口与预计设想不同,没有如期出现,经过逐句分析代码发现,图片显示时间较小,将数值100改为100000。名为“Lena”的窗口显示在桌面底层,且窗口大小不可调,经查阅资料发现,将cv.WINDOW_AUTOSIZE语句更换为cv.WINDOW_NORMAL,即能调节窗口大小,便于显示。

验证二中的实验没有出现问题,如果不进行通道数处理,原本发红的lena会变得发蓝。这是因为cv2读取图片时,默认的顺序是BGR顺序,而matplotlib用的是RGB方式。也就是说,发红的lenna图片读入img后,第三个通道内的数据(也就是红色通道)的数值在plt.imshow的时候,被按照B的方式(也就是蓝色)的方式读了出来,因此图像会偏蓝。BGR和RBG中的三个通道数互换,会改变图片中的三通道颜色显示,个人认为使用Matplotlib库中的plt.show函数显示图像比较简单,不用提前写一个图片显示show函数,不足之处还是要提前进行通道数转换。

任务三中的补全函数,先逐句分析代码含义和目标图像,可以发现该段代码是实现使用三种不同的灰度值填充空矩阵,显示圆形和正方形,只要限定像素点的位置,令其等于不同的灰度值即可。绘制直方图即补全像素值统计函数,预计显示出三个柱形图像,其像素点值为0,150,250。

六、思考题

(1)Python语言与C语言在语法上的主要区别是什么?

  1. Python是一种基于解释器的,面向对象的解释型语言。解释器会逐行读取代码;首先将Python编译为字节码,然后由大型C程序解释。C是一种面向过程的编译型语言,完整的源代码将直接编译为机器代码,由CPU直接执行。
  2. Python不需要事先定义变量类型;C语言中需要事先定义变量类型,在运算过程中需要考虑,溢出,精度等问题。
  3. Python中通过缩进来表示语句体,在Python中每一条语句结尾后没有分号;C语言通过几来表示语句体,在C语言中每一条语句结尾后都需要由英文分号结尾,分号是C语言中唯的语句结束标志。

(2)分析比较OpenCV下标与NumPy下标有什么异同?

结论: OpenCV中(x,y)坐标与NumPy中是相反的。

使用 Numpy 数组代表的图像时,表示的是一个二维数组。用shape方法得到的数组属性为 (height,width,depth) ,矩阵中的行在图像坐标系中对应图像的高度,列对应图像的宽度。在OpenCV中使用数组代表图像时,(x,y)在这里的表示的含义是x是横轴,y是纵轴。

(3)如果想用Matplotlib正常显示彩色图像,需要使用哪种彩色模型?如果想用OpenCV正常显示彩色图像,需要使用哪种彩色模型?

彩色图像使用 Matplotlib是RGB模式,OpenCV加载时是BGR模式;Matplotlib正常显示彩色图像,需要使用RGB彩色模型;OpenCV正常显示彩色图像,需要将BGR转化成RGB后再显示。

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值