繁体   English   中英

Python - 不使用内置方法旋转图像

[英]Python - Rotate Image without using the built-in methods for rotation

如何在 OpenCV 库的帮助下在 Python 中旋转图像,并通过更改图像的高度和宽度值(不使用 OpenCV 中的内置旋转方法)。 它必须使用两个嵌套循环来实现。

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)

感谢您的关注!

交换索引:

您可以使用np.zeros()创建一个空图像,然后将当前图像中的像素读取到空图像中。 您可以更改读取像素的顺序以执行一些基本旋转。 以下示例应该会有所帮助。

测试图像:

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

在此处输入图片说明

向左旋转 90 度:

h,w,c = img.shape

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

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

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

在此处输入图片说明

向右旋转 90 度:

h,w,c = img.shape

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

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

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

在此处输入图片说明

旋转 180 度:

h,w,c = img.shape

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

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

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

在此处输入图片说明

它必须是OpenCv吗? 因为如果不是,你可以很容易地用 PIL 做到这一点:

from PIL import Image

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

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

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

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

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

其他可能性是cv2.ROTATE_90_COUNTERCLOCKWISEcv2.ROTATE_180

我使用 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

如何借助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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM