java旋转图片后边上变黑_图像旋转后出现黑点 - (二) - 填坑

这是填坑篇,之前写的图片旋转程序把图片变成了桌布,几个世纪后,在一个月黑风高的夜晚,我灵光乍现,何不试试双线性插值?

先上代码和效果图。

1 #!/usr/bin/env python3

2 #-*-coding:utf-8-*-

3 """

4 双线性插值参考资料: 双线性插值原理及Python实现 - Jinglever https://www.jianshu.com/p/29e5c84ea5395

6 如果出现错误:...If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config7 执行 pip3 install opencv-contrib-python8 """

9 importnumpy as np10 #np.set_printoptions(suppress=True) # 关闭科学计数法

11 importcv212 importos13

14

15 #旋转矩阵R

16 ANGLE = 30 #(dim=°)

17 assert 0 < ANGLE < 90 #目前限制这个旋转范围,原因是y1, y2, y3, y4上下关系根据角度变化

18 alpha = ANGLE/360*2*np.pi19 R_rev = np.matrix([[np.cos(alpha), np.sin(alpha)], #逆向映射推导的旋转矩阵

20 [-np.sin(alpha), np.cos(alpha)]])21 print(R_rev)22

23 #重设图片大小

24 WIDTH, HEIGHT = 640, 480

25

26 img = cv2.imread("timg.jpg")27 img =cv2.resize(img, (WIDTH, HEIGHT))28 #img_gray = np.float32(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY))

29 img =np.float32(img)30 print(img.shape)31

32 #假设已经得到旋转后的图片,利用图片边框画出图片的矩形,在矩形内遍历坐标就是图片各个像素点的坐标

33 #注意旋转角度超过90度后边框线的上下关系会发生变化,待改进……

34 x = np.arange(np.abs(WIDTH*np.cos(alpha)) + np.abs(HEIGHT*np.sin(alpha)), dtype=np.int32)35 y1 = lambda x: (- x*np.tan(alpha)).astype(np.int32)36 y2 = lambda x: (y1(x) + HEIGHT/np.cos(alpha)).astype(np.int32)37 y3 = lambda x: (x/np.tan(alpha)).astype(np.int32)38 y4 = lambda x: (y3(x) - WIDTH/np.sin(alpha)).as

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值