图像旋转90/180 opencv坐标系
问题描述:
图像旋转90、180、270等
使用类似下面的代码,会有黑边,图像变形之类的问题
其实windows系统自带类似的功能,但是我需要批量处理图像,因此尝试自己写
算法基础:
这种直角的旋转,个人理解不涉及到一些插值的东西,只是像素坐标变换
示例图图像:
逆时针旋转90度:
计算好旋转后各像素点的位置,映射过去就行
就像图像中黄色的点,逆时针旋转90度之后是图像的原点
opencv python(numpy)实现:
import cv2import numpy as npdef main(): # 1.随机创建图片 img_src = cv2.imread(r'11.jpg') height, width = img_src.shape[:2] print("img width:%d height:%d" % (width, height)) # 2.创建X,Y map map_x = np.zeros([width, height], np.float32) map_y = np.zeros([width, height], np.float32) # 3.执行重映射 调整 X Y map位置 for i in range(width): for j in range(height): map_x.itemset((i, j), i)#width -1 - i map_y.itemset((i, j), j) # 4.执行重映射处理 img_dst = cv2.remap(img_src, map_x, map_y, cv2.INTER_LINEAR) # 5.显示结果 cv2.imwrite("qqq\img_yes_1_1_0_1.jpg", img_dst) cv2.waitKey() cv2.destroyAllWindows()if __name__ == '__main__': main()
记不住在哪抄的了,个人觉得这个代码写的真是不错,有水平很python,简洁
这段代码跑出来是照着对角线旋转,如果想逆时针90度需要将map_x.itemset((i, j), i) 改为map_x.itemset((width - 1 - i, j), i),要怎么旋转全看这个位置
结果:
opencv C 实现:
https://blog.csdn.net/andylanzhiyong/article/details/84857915
赞 (0)