Python+OpenCV+图片旋转并用原底色填充新四角的例子
我就废话不多说了,直接上代码吧!
importcv2 frommathimportfabs,sin,cos,radians importnumpyasnp fromscipy.statsimportmode defget_img_rot_broa(img,degree=45,filled_color=-1): """ Desciption: Getimgrotatedacertaindegree, andusesomecolortofill4cornersofthenewimg. """ #获取旋转后4角的填充色 iffilled_color==-1: filled_color=mode([img[0,0],img[0,-1], img[-1,0],img[-1,-1]]).mode[0] ifnp.array(filled_color).shape[0]==2: ifisinstance(filled_color,int): filled_color=(filled_color,filled_color,filled_color) else: filled_color=tuple([int(i)foriinfilled_color]) height,width=img.shape[:2] #旋转后的尺寸 height_new=int(width*fabs(sin(radians(degree)))+ height*fabs(cos(radians(degree)))) width_new=int(height*fabs(sin(radians(degree)))+ width*fabs(cos(radians(degree)))) mat_rotation=cv2.getRotationMatrix2D((width/2,height/2),degree,1) mat_rotation[0,2]+=(width_new-width)/2 mat_rotation[1,2]+=(height_new-height)/2 #Payattentiontothetypeofelementsoffiller_color,whichshouldbe #theintinpurepython,insteadofthoseinnumpy. img_rotated=cv2.warpAffine(img,mat_rotation,(width_new,height_new), borderValue=filled_color) #填充四个角 mask=np.zeros((height_new+2,width_new+2),np.uint8) mask[:]=0 seed_points=[(0,0),(0,height_new-1),(width_new-1,0), (width_new-1,height_new-1)] foriinseed_points: cv2.floodFill(img_rotated,mask,i,filled_color) returnimg_rotated
以上这篇Python+OpenCV+图片旋转并用原底色填充新四角的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。