重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
cv2.imshow("left", img_left)
成都创新互联公司长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为连江企业提供专业的成都网站建设、成都网站设计,连江网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
filename3=str(number)+'n3'+'.jpg' #打印第number张图片+增值方式+保存类型
cv2.imwrite(savedpath + filename3, img_left)
"""
# 数据增强实现
"""
import cv2
import numpy as np
import os
# 图像平移
def img_translation(image):
# 图像平移 下、上、右、左平移
M = np.float32([[1, 0, 0], [0, 1, 100]])
img_down = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
M = np.float32([[1, 0, 0], [0, 1, -100]])
img_up = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
M = np.float32([[1, 0, 100], [0, 1, 0]])
img_right = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
M = np.float32([[1, 0, -100], [0, 1, 0]])
img_left = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
# 保存图片,需要保存上述的哪一图片,就在cv2.imwrite()中,将哪一图片名放入。
# filename='xxx' +'.jpeg'
# cv2.imwrite(savedpath + filename, img_left)
# 显示图形
cv2.imshow("down", img_down)
filename0=str(number)+'n0'+'.jpg'
cv2.imwrite(savedpath + filename0, img_down)
cv2.imshow("up", img_up)
filename1=str(number)+'n1'+'.jpg'
cv2.imwrite(savedpath + filename1, img_up)
cv2.imshow("right", img_right)
filename2=str(number)+'n2'+'.jpg'
cv2.imwrite(savedpath + filename2, img_right)
cv2.imshow("left", img_left)
filename3=str(number)+'n3'+'.jpg'
cv2.imwrite(savedpath + filename3, img_left)
# 图像缩放
def img_scale(image):
result = cv2.resize(image, (224, 224))
cv2.imshow("scale", result)
filename=str(number)+'n5'+'.jpg'
cv2.imwrite(savedpath + filename, result)
# 图像翻转
def img_flip(image):
# 0以X轴为对称轴翻转,0以Y轴为对称轴翻转, 0X轴Y轴翻转
horizontally = cv2.flip(image, 0) # 水平镜像
vertically = cv2.flip(image, 1) # 垂直镜像
hv = cv2.flip(image, -1) # 水平垂直镜像
# 显示图形
cv2.imshow("Horizontally", horizontally)
filename1=str(number)+'n6'+'.jpg'
cv2.imwrite(savedpath + filename1, horizontally)
cv2.imshow("Vertically", vertically)
filename2=str(number)+'n7'+'.jpg'
cv2.imwrite(savedpath + filename2, vertically)
cv2.imshow("Horizontally Vertically", hv)
filename3=str(number)+'n8'+'.jpg'
cv2.imwrite(savedpath + filename3, hv)
# 图像旋转
def img_rotation(image):
# 原图的高、宽 以及通道数
rows, cols, channel = image.shape
# 绕图像的中心旋转
# 参数:旋转中心 旋转度数 scale
M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 30, 1)
# 参数:原始图像 旋转参数 元素图像宽高
rotated = cv2.warpAffine(image, M, (cols, rows))
# 显示图像
cv2.imshow("rotated", rotated)
filename1=str(number)+'n9'+'.jpg'
cv2.imwrite(savedpath + filename1, rotated)
#选装60度
W = cv2.getRotationMatrix2D((cols / 2, rows / 2), 60, 1)
# 参数:原始图像 旋转参数 元素图像宽高
rotated1 = cv2.warpAffine(image, W, (cols, rows))
cv2.imshow("rotated", rotated)
filename2=str(number)+'n12'+'.jpg'
cv2.imwrite(savedpath + filename2, rotated1)
#选装145度
W = cv2.getRotationMatrix2D((cols / 2, rows / 2), 60, 1)
# 参数:原始图像 旋转参数 元素图像宽高
rotated2 = cv2.warpAffine(image, W, (cols, rows))
cv2.imshow("rotated", rotated)
filename3=str(number)+'n13'+'.jpg'
cv2.imwrite(savedpath + filename3, rotated2)
# 图像加噪
def img_noise(image, mean=0, var=0.001):
'''
添加高斯噪声
mean : 均值
var : 方差
'''
image = np.array(image / 255, dtype=float)
noise = np.random.normal(mean, var ** 0.5, image.shape)
out = image + noise
if out.min() 0:
low_clip = -1.
else:
low_clip = 0.
out = np.clip(out, low_clip, 1.0)
out = np.uint8(out * 255)
cv2.imshow("noise", out)
filename3=str(number)+'n10'+'.jpg'
cv2.imwrite(savedpath + filename3, out)
# 图像亮度调节
def img_brightness(image):
contrast = 1 # 对比度
brightness = 100 # 亮度
pic_turn = cv2.addWeighted(image, contrast, image, 0, brightness)
# cv2.addWeighted(对象,对比度,对象,对比度)
'''cv2.addWeighted()实现的是图像透明度的改变与图像的叠加'''
cv2.imshow('bright', pic_turn) # 显示图片
filename3=str(number)+'n11'+'.jpg'
cv2.imwrite(savedpath + filename3, pic_turn)
if __name__ == '__main__':
i = 0
path = '../Data/'
print(path)
savedpath = './result_new/'
filelist = os.listdir(path)
total_num = len(filelist)
for item in filelist:
number = i + 1
i = number
print("######")
print("打印到第",i,"张图片")
src = cv2.imread(path + item)
img_translation(src)
img_scale(src)
img_flip(src)
img_rotation(src)
img_noise(src)
img_brightness(src)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码较为繁琐,有空之后进行优化
输出结果
我们可以用python实现很多功能,那么如何用python读取一个图像呢?下面我给大家分享一下。
工具/材料
CMD命令行
01
首先按下Win+R组合键打开运行界面,输入CMD,如下图所示
02
接下来在弹出的CMD界面中导入Python的图像处理模块PIL,如下图所示
03
接下来利用PIL模块的open方法读取图像,只要在括号里传入图像地址即可,如下图所示
04
最后执行程序我们就可以看到程序自动调用图像识别软件进行图像的读取了,如下图所示
生成一张纯色的图片
先设置图片的颜色,接着利用Image模块的new方法新生成一张图片,png格式的图片需要设置成rgba,类似的还有rgb,L(灰度图等),尺寸设定为640,480,这个可以根据自己的情况设定,颜色同样如此。
批量生成图片
上面生成了一张图片,那要生成十张图片呢,这种步骤一样,只是颜色改变的,利用循环就可以解决。首先创建一个颜色列表,把要生成的图片颜色放进去。接着循环获取不同的颜色,保存的时候利用字符串拼接的方法改变图片的名字。
本地生成的图片
封装成函数
前面的方法已经可以批量生成图片了,为了通用性强一点,我们可以封装成函数,把哪些可以改变的参数单独抽离出来。尺寸也同样,使用的时候,可以根据自己的需要定义颜色列表和尺寸。当然还有加一些提示用语和报错兼容性,这里就不讲了。
本地生成的图片
python基础——读取图片
图像后缀名的转换:
要注意的是:对于彩色图像,不管其格式是png,还是bmp,或者jpg,
在PIL中 ,使用Image模块的open()函数打开后,返回的图像对象的模式都是 RGB ,对于灰度图像,不管其图像格式是PNG,还是BMP,JPG,打开后,其模式为灰度L。
PNG BMP JPG彩色图像格式之间的转换:可以通过Image模块的open函数和save函数,具体来说,在打开这些图像时,PIL会将他们解码成三通道的RGB图像。用户可以基于RGB进行处理。处理完毕后可以将其处理结果保存成PNG BMP JPG中任何格式。
PNG BMP JPG灰度图像格式之间的转换,同理也可以通过类似途径,只是解码后时模式为L的图像。
python库可以用来读取图片的库
1. PIL.Image.open
无论是jpg还是png都能准确读取,PIL.Image.open 不直接返回numpy对象,可以用numpy提供的函数进行转换;
其他模块都直接返回numpy.ndarray对象,通道顺序为RGB,通道值得默认范围为0-255。
拓展:
利用PIL中的Image函数读取出来不是array格式,这时候需要用np.asarray() 或者np.array()函数 。
区别:np.array() 是深拷贝,np.asarray() 是浅拷贝
关于深拷贝和浅拷贝,这里给出一个说明:
Python 中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝 拷贝对象及其子对象
一个很好的例子:
2. cv2.imread
使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255
cv2.imread():读入图片,共两个参数:第一个参数为要读入的图片文件名,第二个参数为如何读取图片(cv2.IMREAD_COLOR:读入一副彩色图片;cv2.IMREAD_GRAYSCALE:灰度图片;cv2.IMREAD_UNCHANGED:读入一幅图片,并包括其alpha通道。)
cv2.imread()不能有中文路径,否则读取不出来
cv2.imread() 读出来同样是array形式,但是如果是单通道的图,读出来的是三通道的。
3. matplotlib.image.imread
用于显示图片matplotlib 用于读取图片并且读取出来就是array格式
解决使用plt.savefig 保存图片时一片空白 : 在plt.show() 之前调用 plt.savefig();
4. scipy.ndimage.imread
scipy.ndimage.imread(*args, **kwds) Use ``matplotlib.pyplot.imread`` instead.
Returns:imread:ndarray(多维数组)
5. scipy.misc.imread
scipy.misc.imread(name, flatten=False, mode=None)
Use ``imageio.imread`` instead.
返回:imread: ndarray。通过读取图像获得的阵列 。读出来是array 形式,并且按照(H,W,C)形式保存
4. skimage.io.imread
scikit-image和numpy,matplotlib,scikit-learn等包都是Scipy项目的成员,通用numpy数组作为基本数据格式。在python中载入包名为skimage:所得即为numpy数组。
io.imread读出图片格式是uint8(unsigned int);value是numpy array;图像数据是以RGB的格式进行存储的,通道值默认范围0-255。