《数字图像处理》-上机1

上机环境说明 编程语言:python,可安装 Anaconda 进行包及环境管理 编程软件:建议 pycharm 需要的 python 库:opencv,numpy,Matplotlib 等

 OpenCV 简介

 1、OpenCV 介绍

OpenCV 是一个跨平台开源计算机视觉库,可以运行在 Linux、Windows 和 Mac OS 操作系统上。它由一系列 C 函数和 C++ 类构成,同时也提供了 Python 接口,包含了数字图像处理和计算机视觉方面很多通用算法。

2、Python 安装

OpenCV 对于 Linux 和 Windows 操作系统,首先需要安装 NumPy,然后再安 装 OpenCV,可以选择两种不同版本:

仅安装主模块包: pip install opencv-python

安装完整包(包括主模块和附加模块) pip install opencv-contrib-python

为加快安装速度可选取国内源安装,比如采用下面的命令安装:

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple/

pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple/

3、OpenCV 主要模块

OpenCV 可以被划分为不同模块,其主要模块如下:

 OpenCV 在视觉算法中的功能非常强大,其中一个原因就是该算法库一直在 与时俱进的更新最新的算法,对于具有专利的算法(如 SURF)以及一些还没有 稳定的算法,OpenCV 会将其置于扩展模块中,这些扩展模块包含在 opencv_contrib 代码库中。对于稳定的算法,会被移到 OpenCV 主仓库代码中, 因此需要谨慎的使用 opencv_contrib,因为不同版本的函数可能存在差异。

4、OpenCV 应用场景

OpenCV 可以应用但不仅限于以下场景:二维和三维特征提取、街景图像拼接、 人脸识别系统、手势识别、人机交互、动作识别、物体识别、自动检查和监视、 分割与识别、医学图像分析、运动跟踪、增强现实、视频/图像搜索与检索、机 器人与无人驾驶汽车导航与控制、驾驶员疲劳驾驶检测等。 

5、图像文件类型

下表列示了 OpenCV 支持的文件格式及其关联的文件扩展名:

 

上机练习 1 图像读写及显示操作

  • 上机目的

熟悉 OpenCV 图像读写及显示操作。

  • 相关知识

对于 python 而言,在引用 opencv 库的时候可写为 import cv2 as cv。其 中,cv2 是 opencv 的 C++命名空间名称,使用它来表示调用的是 C++开发的 opencv 的接口。

  • 上机内容

按照上面相关知识的介绍,学会利用 opencv 进行灰度图像及彩色图像的读、显示及写 操作,并编写相应的测试程序。

1、配置opencv环境:PC原先就安装了pycharm和配置了numpy环境;本人仅需安装opencv的库即可,cmd运行代码如下:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

运行结果为:

2、测试opencv

运行结果为:

 

 

3、图像的读写及显示操作:

(1)、读取图像

代码为:

import cv2 as cv

img1=cv.imread('D:/cbDB/opencv/project1/2.png',1)
img2=cv.imread('D:/cbDB/opencv/project1/2.png',0)
img3=cv.imread('D:/cbDB/opencv/project1/2.png',-1)

rows,cols,chn = img1.shape
size = img1.size
print('image shape:', rows, cols, chn)
print('image size:', size)
print('image type:', img1.dtype)
 

运行结果为:

 

 

(2)、显示图像

代码为:

import cv2 as cv

img1=cv.imread('D:/cbDB/opencv/project1/2.png',1)
img2=cv.imread('D:/cbDB/opencv/project1/2.png',0)
img3=cv.imread('D:/cbDB/opencv/project1/2.png',-1)

rows,cols,chn = img1.shape
size = img1.size
print('image shape:', rows, cols, chn)
print('image size:', size)
print('image type:', img1.dtype)

cv.imshow("Image1",img1)
cv.imshow("Image2",img2)
cv.imshow("Image

 运行结果为:

(3)、保存图像

代码为:

import cv2 as cv

img1=cv.imread('D:/cbDB/opencv/project1/2.png',1)
img2=cv.imread('D:/cbDB/opencv/project1/2.png',0)
img3=cv.imread('D:/cbDB/opencv/project1/2.png',-1)

rows,cols,chn = img1.shape
size = img1.size
print('image shape:', rows, cols, chn)
print('image size:', size)
print('image type:', img1.dtype)

cv.imshow("Image1",img1)
cv.imshow("Image2",img2)
cv.imshow("Image3",img3)
k = cv.waitKey(0)
if k ==27:
    cv.destroyAllWindows()
elif k ==ord('s'):
    cv.imwrite("./cat.png", img1, [int(cv.IMWRITE_PNG_COMPRESSION), 0])
    cv.imwrite("./cat2.png", img1, [int(cv.IMWRITE_PNG_COMPRESSION), 9])
    cv.destroyAllWindows()

运行结果为(按了“s”之后的结果):

检查得到:

 

(4)、图像像素存储形式

代码为:

 

import cv2 as cv

img1=cv.imread('D:/cbDB/opencv/project1/2.png',1)
img2=cv.imread('D:/cbDB/opencv/project1/2.png',0)
img3=cv.imread('D:/cbDB/opencv/project1/2.png',-1)

rows,cols,chn = img1.shape
size = img1.size
print('image shape:', rows, cols, chn)
print('image size:', size)
print('image type:', img1.dtype)

cv.imshow("Image1",img1)
cv.imshow("Image2",img2)
cv.imshow("Image3",img3)
k = cv.waitKey(0)
if k ==27:
    cv.destroyAllWindows()
#elif k ==ord('s'):
    #cv.imwrite("./cat.png", img1, [int(cv.IMWRITE_PNG_COMPRESSION), 0])
    #cv.imwrite("./cat2.png", img1, [int(cv.IMWRITE_PNG_COMPRESSION), 9])
    #cv.destroyAllWindows()

#像素值获取和设置
pixel = img2[100,100] #[57 63 68],获取(100,100)处的像素值

print(pixel)
#ROI,Range of instrest
roi = img3[100:200,300:400] #截取 100 行到 200 行,列为 300 到 400 列的整块区域

print(roi)

运行结果为:

(5)、 使用 Matplotlib 显示图像

代码为:

import cv2 as cv
from matplotlib import pyplot as plt
img1=cv.imread('D:/cbDB/opencv/project1/2.png',1)
img2=cv.imread('D:/cbDB/opencv/project1/2.png',0)
img3=cv.imread('D:/cbDB/opencv/project1/2.png',-1)

k = cv.waitKey(0)
if k ==27:
    cv.destroyAllWindows()
plt.imshow(img1, cmap = 'gray', interpolation ='bicubic')
plt.xticks([]),plt.yticks([]) # 隐藏x 轴和y轴上的刻度值
plt.show()

 运行结果为:

  • 思考题

(1)总结本次上机相关 opencv 函数的用法,在掌握图像相关操作的基础上,通过查阅 资料尝试编写利用 opencv 函数编写视频读取的程序。

(2)尝试解决彩色图像 cv.show 和 plt.show 显示不一致的问题。

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云边牧风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值