Python+OpenCV+图片旋转并用原底色填充新四角的例子


Posted in Python onDecember 12, 2019

我就废话不多说了,直接上代码吧!

import cv2
from math import fabs, sin, cos, radians
import numpy as np
from scipy.stats import mode


def get_img_rot_broa(img, degree=45, filled_color=-1):
 """
 Desciption:
  Get img rotated a certain degree,
 and use some color to fill 4 corners of the new img.
 """

 # 获取旋转后4角的填充色
 if filled_color == -1:
 filled_color = mode([img[0, 0], img[0, -1],
    img[-1, 0], img[-1, -1]]).mode[0]
 if np.array(filled_color).shape[0] == 2:
 if isinstance(filled_color, int):
  filled_color = (filled_color, filled_color, filled_color)
 else:
 filled_color = tuple([int(i) for i in filled_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

 # Pay attention to the type of elements of filler_color, which should be
 # the int in pure python, instead of those in numpy.
 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)]
 for i in seed_points:
 cv2.floodFill(img_rotated, mask, i, filled_color)

 return img_rotated

以上这篇Python+OpenCV+图片旋转并用原底色填充新四角的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python入门之语句(if语句、while语句、for语句)
Jan 19 Python
Python批量更改文件名的实现方法
Oct 29 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
python将文本中的空格替换为换行的方法
Mar 19 Python
聊聊python里如何用Borg pattern实现的单例模式
Jun 06 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
pytorch中的weight-initilzation用法
Jun 24 Python
python3.4中清屏的处理方法
Jul 06 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
Dec 12 #Python
使用python去除图片白色像素的实例
Dec 12 #Python
用Python去除图像的黑色或白色背景实例
Dec 12 #Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 #Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 #Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 #Python
Python FtpLib模块应用操作详解
Dec 12 #Python
You might like
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
javascript URL编码和解码使用说明
2010/04/12 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
如何写好你的JavaScript【推荐】
2017/03/02 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
[04:11]2014DOTA2国际邀请赛 CIS遗憾出局梦想不灭
2014/07/09 DOTA
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
护理专业毕业生自我鉴定
2013/10/08 职场文书
入学申请自荐信范文
2014/02/26 职场文书
节水口号标语
2014/06/19 职场文书
费用申请报告范文
2015/05/15 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
Python中itertools库的四个函数介绍
2022/04/06 Python