Ham*_*mid 2 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)
Run Code Online (Sandbox Code Playgroud)
感谢您抽出宝贵时间来帮助我!
您可以创建一个空图像,np.zeros()
然后将当前图像中的像素读取到空图像.您可以更改读取像素的顺序以执行一些基本旋转.以下示例应该有所帮助.
img = cv2.imread('texas_longhorns_log.png')
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
它必须是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')
Run Code Online (Sandbox Code Playgroud)
如果您需要在 OpenCV 中进行简单的旋转,它是内置的:
img=cv2.imread('Images/Screenshot.png',cv2.IMREAD_GRAYSCALE)
imgrot = cv2.rotate(img,cv2.ROTATE_90_CLOCKWISE)
Run Code Online (Sandbox Code Playgroud)
其他可能性是cv2.ROTATE_90_COUNTERCLOCKWISE
和cv2.ROTATE_180