影像中的物件處于不同的方向。我想改變所有物件的垂直方向。代碼顯示如下。該代碼沒有將所有物件的方向改為垂直。[Image]
image = cv2.imread(r'C:UsersDesktopSam.jpg')
Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 創建一個二進制影像
_, binary = cv2.threshold(Gray, 127, 255, cv2.THRESH_BINARY_INV)
# 從二進制影像中找到輪廓線
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
[-2:]
for i in range(len(contours)):
rect = cv2.minAreaRect(contours[i])
angle=rect[2]
print('rect',rect)
print('ANGLE:',angle)
if angle>0:
rangle = 90-angle
print('rangle:',rangle)
否則。
rangle =angle
print('rangle:',rangle)
rotate_img= ndimage.rotate(cimg, rangle, reshape=True)
print('rotate_img shape:',rotate_img.shape)
plt.figure(figsize=(8, 8))
plt.title('rotate_img')
plt.imshow(rotate_img, cmap='gray')
plt.show()
uj5u.com熱心網友回復:
為了在垂直方向上旋轉物體,我們首先需要找到一個物體的方向。OpenCV提供了一個函式cv2.minAreaRect()來找到最小面積矩形的中心,(高度,寬度)和旋轉的角度。高度必須大于寬度才能在垂直方向上。對于垂直方向來說,只有旋轉角度是不夠的。由于以下原因,旋轉角度要從-0到-90。這里有更多的細節。the ai learner and namkeenman/p>
矩形中的最低點是第0個頂點,而第1、2、3個頂點是順時針方向。 頂點按順時針方向排列。
高度是第0和第1(或第2和第3)個頂點之間的距離。
寬度是第1和第2(或第0和第3)個頂點之間的距離。
旋轉的角度是直線(連接起點和終點)與水平面之間的角度。 端點)和水平面之間的角度。
image = cv2.imread(r'C:UsersDesktopSam.jpg')
Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 創建一個二進制閾值影像
_, binary = cv2.threshold(Gray, 127, 255, cv2.THRESH_BINARY_INV)
# 從二進制影像中找到輪廓線
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
[-2:]
for i in range(len(contours)):
rect = cv2.minAreaRect(contours[i])
角度=rect[2]
rwidth,rheight=rect[2] 。
如果rheight>rwidth :
rangle = angle
print('rangle:',rangle)
否則。
rangle =90-abs(angle)
print('rangle:',rangle)
rotate_img= ndimage.rotate(cimg, rangle, reshape=True)
print('rotate_img shape:',rotate_img.shape)
plt.figure(figsize=(8, 8))
plt.title('rotate_img')
plt.imshow(rotate_img, cmap='gray')
plt.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/309078.html
標籤:
