Python-旋转图像

时间:2018-10-02 22:30:25

标签: python opencv image-processing

如何借助OpenCv库在Python中旋转图像,以及如何更改图像的高度和宽度值(不使用OpenCv中内置的旋转方法)。它必须实现两个嵌套的for循环。

img=cv2.imread('Images/Screenshot.png',cv2.IMREAD_GRAYSCALE)

height, width = img.shape

# for i in range(0,height):
#     for j in range(0,width):
#         img[i][j]=

# show rotated image
cv2.imshow("image",img)

感谢您抽出宝贵的时间来帮助我!

5 个答案:

答案 0 :(得分:6)

交换索引:

您可以使用String serviceName创建空白图像,然后将像素从当前图像读取到空白图像。您可以更改读取像素的顺序以执行一些基本旋转。以下示例将有所帮助。

测试图像:

np.zeros()

enter image description here

向左旋转90度:

img = cv2.imread('texas_longhorns_log.png')

enter image description here

向右旋转90度:

h,w,c = img.shape

h = h-1
w = w-1

empty_img = np.zeros([h,w,3], dtype=np.uint8)

for i in range(h):
    for j in range(w):
        empty_img[i,j] = img[j,i]
        empty_img = empty_img[0:h,0:w]

cv2.imwrite("tester1.png", empty_img)

enter image description here

旋转180度:

h,w,c = img.shape

h = h-1
w = w-1

empty_img = np.zeros([h,w,3], dtype=np.uint8)

for i in range(h):
    for j in range(w):
        empty_img[i,j] = img[h-j,w-i]
        empty_img = empty_img[0:h,0:w]

cv2.imwrite("tester2.png", empty_img)

enter image description here

答案 1 :(得分:1)

如果您需要在OpenCV中进行简单的轮换,它是内置的:

img=cv2.imread('Images/Screenshot.png',cv2.IMREAD_GRAYSCALE)

imgrot = cv2.rotate(img,cv2.ROTATE_90_CLOCKWISE)

其他可能性是cv2.ROTATE_90_COUNTERCLOCKWISEcv2.ROTATE_180

答案 2 :(得分:0)

必须是OpenCv吗?原因如果不是,您可以使用PIL轻松做到这一点:

from PIL import Image

def rotate_img(img_path, rt_degr):
    img = Image.open(img_path)
    return img.rotate(rt_degr)

img_rt_90 = rotate_img('Images/Screenshot.png', 90)
img_rt_90.save('img_rt_90.png')

答案 3 :(得分:0)

我使用PIL软件包,这样做非常简单。

from PIL import Image
path = '/Users/diegodsp/sample.jpg'
img = Image.open(path)
img = img.rotate(90) # 90, -90, 180, ...
img.save(path) # to override your old file

答案 4 :(得分:0)

如果您有兴趣从头开始,则可以使用剪切变形方法将图像旋转到任意角度。 这里有一个很好的参考: https://medium.com/@gautamnagrawal/rotating-image-by-any-angle-shear-transformation-using-only-numpy-d28d16eb5076