wangshujun的个人空间 https://bbs.21ic.com/?62556 [收藏] [复制] [RSS]

日志

第四天,opencv对图片的基本操作

已有 3330 次阅读2020-2-16 11:41 |个人分类:opencv项目|系统分类:视频音频

一、读取文件中的图片
img=cv2.imread(path_of_image, intflag)
函数参数一: 需要读入图像的完整的路径
典型在python当中windows下的\不能用,替换成\\才行,相对路径和绝对路径都可以用,各种常见的图片都可以正常读取到
读取到的结果是一个数组

函数参数二: 标志以什么形式读入图像,可以选择一下方式:
· cv2.IMREAD_COLOR: 加载彩色图像。任何图像的透明度都将被忽略。它是默认标志
· cv2.IMREAD_GRAYSCALE:以灰度模式加载图像
· cv2.IMREAD_UNCHANGED:保留读取图片原有的颜色通道

· 1 :等同于cv2.IMREAD_COLOR
· 0 :等同于cv2.IMREAD_GRAYSCALE
· -1 :等同于cv2.IMREAD_UNCHANGED

示例:
-----------------------
import numpy as np
import cv2

gray_img = cv2.imread('img/cartoon.jpg', 0)  #加载灰度图像
------------------
二、显示图片
imshow函数作用是在窗口中显示图像,窗口自动适合于图像大小,我们也可以通过imutils模块调整显示图像的窗口的大小。函数官方定义如下:
cv2.imshow(windows_name, image)
函数参数一: 窗口名称(字符串),如果存在指定名称的窗口那么替换里面的图片,否则重建窗口
函数参数二: 图像对象,类型是numpy中的ndarray类型
示例:
----------
cv2.imshow('origin image', rgb_img)   #显示原图
----------
三、保存图片
imwrite函数检图像保存到本地,官方定义:

cv2.imwrite(image_filename, image)
函数参数一: 保存的图像名称(字符串,可以包括路径)
函数参数二: 图像对象,类型是numpy中的ndarray类型

示例:
----------
cv2.imwrite('rgb_img.jpg', rgb_img)   #将图像保存成jpg文件
cv2.imwrite('gray_img.png', gray_img) #将图像保存成png文件
--------
四、裁剪一个小图
从原图中截取局部出来,成为一个新的图像,这实际是python的一个数组切片操作。
New_Img = Old_Img[l:r,t:b]   #裁剪图像
执行结果是一个新的图片或者说数组。
lrtb,分别是新图片在老图片里面的左右顶底四个位置。
配套的属性.shape,输出x,y,d分别是宽高和颜色数(单色1,彩色3/4)
五、给图片加边
加固定的边可以先生成一个空白的图像,然后把原图像填充到指定位置,数组操作即可。
opencv也提供了对应的函数,比较方便:
img = cv2.copyMakeBorder(img, t,b, l, f, cv2.BORDER_CONSTANT, value=(255,255,255))
结果和原图使用的是同一个img,不会出错,直接替换掉了原来的文件, cv2.BORDER_CONSTANT是加边的模式,常用的就是定值方式,最后是加边用到的像素值,彩色直接写rgb值即可,单色图直接写一个数就好。
六、图片尺寸缩放
New_Img=cv2.resize(Old_img,(x,y),fx,fy,mode)
举例图片如下:

七、转换成灰度
cv2.cvtColor(input_image, flag)
参数一: input_image表示将要变换色彩的图像ndarray对象
参数二: 表示图像色彩空间变换的类型,以下介绍常用的两种:
· cv2.COLOR_BGR2GRAY: 表示将图像从BGR空间转化成灰度图,最常用因为很多特征信息都是颜色不敏感的,转成灰度后可以加速很多
· cv2.COLOR_BGR2HSV: 表示将图像从RGB空间转换到HSV空间

八、转换成二值
这个后面再写,因为这个有点说法,对于后期的图像比较有用
九、取单一颜色通道
使用数组切片实现
b = image[:, :, 0]
g = image[:, :, 1]
r = image[:, :, 2]
直接用opencv的split函数实现
(b, g, r) = cv2.split(image)
b,g,r分别是和原图相同尺寸的单色数组
十、关闭打开的窗口
cv2.destroyWindow(windows_name) #销毁单个特定窗口
cv2.destroyAllWindows() #销毁全部窗口,无参数
配套参数按键等待函数
key=cv2.waitKey(time_of_milliseconds)
如果指定的时间为不大于0,则一直等到有按键才继续执行,如果大于零则时间到或者有按键继续
十一、绘图
blank_image = np.zeros((height,width,3), np.uint8)
建造一个空白图像,默认黑色
blank_image[:,:] = (255,255,255)
填充成全白
blank_image[:,0:0.5*width] = (255,0,0)
上半区填充成蓝色
绘图函数
cv2.line(image, starting, ending, color, thickness, lineType)
cv2.rectangle(image, top-left, bottom-right, color, thickness, lineType)
cv2.circle(image, center, radius, color, thickness, lineType)
cv2.circle(image, center, (major-axis-length, minor-axis-length), angle, startAngle, endAngle, color, thickness, lineType)
cv2.polylines(image, [point-set], flag, color, thickness, lineType)



路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)