1 圆形径向裁剪
图像处理中对于鱼眼镜头获取的sensor图像是圆形,后端ISP处理中Drc、gamma、Y域对比度拉伸等模块会将圆形周边的亮度拉亮,或者色彩发生改变,从而影响鱼眼图像整体效果,尤其针对多帧拼接时影响会更大。因此,通常会采用径向裁剪的方式,
保留有效区域图像,将非有效区图像进行透明化或者拉黑。
2 径向裁剪实现(python+opencv)
圆形径向裁剪代码实现如下,该代码实现非有效区域透明化处理。
1 #coding:utf8 2 3 import numpy as np 4 import cv2 5 from matplotlib import pyplot as plt 6 import glob as gb 7 8 # 图像处理,获取图片最大内接圆,其他区域置为透明 9 def img_deal(input_img): 10 # cv2.IMREAD_COLOR,读取BGR通道数值,即彩色通道,该参数为函数默认值 11 # cv2.IMREAD_UNCHANGED,读取透明(alpha)通道数值 12 # cv2.IMREAD_ANYDEPTH,读取灰色图,返回矩阵是两维的 13 img = cv2.imread(input_img, cv2.IMREAD_UNCHANGED) 14 rows, cols, channel = img.shape 15 16 # 创建一张4通道的新图片,包含透明通道,初始化是透明的 17 img_new = np.zeros((rows,cols,4),np.uint8) 18 img_new[:,:,0:3] = img[:,:,0:3] 19 20 # 创建一张单通道的图片,设置最大内接圆为不透明,注意圆心的坐标设置,cols是x坐标,rows是y坐标 21 img_circle = np.zeros((rows,cols,1),np.uint8) 22 img_circle[:,:,:] = 0 # 设置为全透明 23 img_circle = cv2.circle(img_circle,(cols/2,rows/2),min(rows, cols)/2,(255),-1) # 设置最大内接圆为不透明 24 25 # 图片融合 26 img_new[:,:,3] = img_circle[:,:,0] 27 28 # 保存图片 29 cv2.imwrite(input_img+".png", img_new) 30 # cv2.imencode('.jpg', img)[1].tofile('./9.jpg') # 保存到另外的位置 31 32 # 显示图片,调用opencv展示 33 # cv2.imshow("img_new", img_new) 34 # cv2.waitKey(0) 35 # cv2.destroyAllWindows() 36 37 # 显示图片,调用matplotlib.pyplot展示 38 plt.subplot(121), plt.imshow(img_convert(img), cmap='gray'), plt.title('IMG') 39 plt.subplot(122), plt.imshow(img_convert(img_new), cmap='gray'), plt.title('IMG_NEW') 40 plt.show() 41 42 # cv2与matplotlib的图像转换,cv2是bgr格式,matplotlib是rgb格式 43 def img_convert(cv2_img): 44 # 灰度图片直接返回 45 if len(cv2_img.shape) == 2: 46 return cv2_img 47 # 3通道的BGR图片 48 elif len(cv2_img.shape) == 3 and cv2_img.shape[2] == 3: 49 b, g, r = cv2.split(cv2_img) 50 return cv2.merge((r, g, b)) 51 # 4通道的BGR图片 52 elif len(cv2_img.shape) == 3 and cv2_img.shape[2] == 4: 53 b, g, r, a = cv2.split(cv2_img) 54 return cv2.merge((r, g, b, a)) 55 # 未知图片格式 56 else: 57 return cv2_img 58 59 # 主函数 60 if __name__ == "__main__": 61 img_path = gb.glob("img/*") 62 for path in img_path: 63 print path 64 img_deal(path)
仿真效果如下: