python常用代码整理
1. 黑白图、三通道图转化为单通道图
第一种办法(读取时就转化):img = cv2.imread('test.jpg', 0) # 参数0等价于:cv2.IMREAD_GRAYSCALE。 如果不加0,会默认读取为三通道图像,即便原图像是灰度图。
第二种办法(读取后再转化):img = cv2.cvtColor(img , cv2.COLOR_RGB2GRAY)
PIL的办法(读取时就转化): img = Image.open('test.jpg').convert('L') # 参数为"1"时示意转化为二值化图(位深度为1,每个像素点的值为0或1)
2.读写txt
data_path = '../../data' f_Edges = data_path + '/{}{}'.format('lines', '_Edge.txt') with open(f_Edges, 'w') as file: for a, l, lc in zip(axes, lines, line_colors): for i in range(len(l)): #写入一条记录 file.writelines('{} {} {} {}\n'.format(l[i, 0, 0], l[i, 1, 0], l[i, 0, 1], l[i, 1, 1]))
3.np数组维度变换
import cv2 import numpy as np image_path='v1.1/train/Z_3_19_DOM.jpg' #image1 = cv2.imread(image_path,0) image1 = cv2.imread(image_path) print('读取原始RGB图像维度:{}'.format(image1.shape)) image1 = image1.astype(np.float32) / 255. img = image1.transpose(2,0,1) print('图像维度调整:{}'.format(img.shape)) #print(image1) h, w = image1.shape[:2] print('图像尺寸:{},{}'.format(h, w)) #----------------------------------------------------- arrays = np.empty((0,1, h, w)) #创建空数组 tmp=img[0,:,:] tmp1=img[1,:,:] tmp2=img[2,:,:] print('图像单通道升高维度2次:{}'.format(tmp[None][None].shape)) arrays = np.concatenate((arrays, tmp[None][None]), axis=0) arrays = np.concatenate((arrays, tmp1[None][None]), axis=0) arrays = np.concatenate((arrays, tmp2[None][None]), axis=0) image_gray = cv2.imread(image_path,0) img_g = image_gray[None][None] #c_gray=img_g.transpose(0,1,2) arrays = np.concatenate((arrays, img_g), axis=0) print('动态数组:{}'.format(np.shape(arrays))) print(type(arrays))
4.数组元素访问:
import numpy as zw # 导入NumPy模块,并简写为zw biaoxing=zw.array([23,43,65,76,83,34,1,34,56,97,32,32,36,61,42])# 创建数组biaoxing print(biaoxing[1:6])# []中的数值为要选取索引值1(第2个元素)到索引值6(第7个元素)之间的元素 print(biaoxing[4:-3])# []中的数值为要选取索引值4(第5个元素)到索引值-3(倒数第3个元素)之间的元素 print(biaoxing[:6])# []中的数值为忽略起始元素,只指明了结束位置。 print(biaoxing[4:])# []中的数值为忽略了区间的结束位置,只指明了起始位置。
缩放图像
import cv2 import numpy as np def resize_and_crop(image, size, interp_mode=None): """ Apply a central crop to an image to resize it to a fixed size. """ source_size = np.array(image.shape[:2], dtype=float) # 读取宽高 target_size = np.array(size, dtype=float) # Scale缩放比例 scale = np.amax(target_size / source_size) inter_size = np.round(source_size * scale).astype(int) # 比例取整 if interp_mode is None: interp_mode = cv2.INTER_AREA if scale < 1 else cv2.INTER_LINEAR image = cv2.resize(image, (inter_size[1], inter_size[0]),interpolation=interp_mode) # Central crop pad = np.round((source_size * scale - target_size) / 2.).astype(int) image = image[pad[0]:(pad[0] + int(target_size[0])),pad[1]:(pad[1] + int(target_size[1]))] return image image_path='v1.1/train/Z_3_19_DOM.jpg' image1 = cv2.imread(image_path) print('读取原始RGB图像维度:{}'.format(image1.shape)) rgb_img = resize_and_crop(image1,[512,512]) print('缩放后RGB图像维度:{}'.format(rgb_img.shape)) cv2.imwrite('resize.png',rgb_img)
5.
# [m : ] 代表列表中的第m+1项到最后一项 # [ : n] 代表列表中的第一项到第n项 # [-1] 代表去到最后一项 # [:-1]代表除了最后一个都获取到 # [::-1]代表逆序取,从后向前取 # [2::-1]代表从下标从0到2的三个数,逆序取 # [1:]代表从下标为1开始取到最后一个数 # https://www.runoob.com/numpy/numpy-ndarray-object.html # https://blog.csdn.net/qq_51478745/article/details/127401026 import numpy as np a = np.arange(10) # [0 1 2 3 4 5 6 7 8 9] print("原始数组:{}".format(a)) print("从第3个元素到最后一个:") print(a[3:]) print("从第1个元素到5个:") print(a[:5]) print("最后x项:") print(a[-1]) print(a[-2]) print("代表除了最后一个都获取到") print(a[:-1]) print("代表逆序取,从后向前取") print(a[::-1]) print("代表从下标从0到2的三个数,逆序取") print(a[2::-1])
作者:太一吾鱼水
文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。
欢迎大家留言交流,转载请注明出处。