我想用一个点到中心来裁剪圆形,怎么做最简单?谢谢,这是我的代码
import numpy as np
import cv2
img = cv2.imread('lenna.png',cv2.IMREAD_COLOR)
cv2.circle(img,(312,237), 63, (0,0,0),2)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
我想用一个点到中心来裁剪圆形,怎么做最简单?谢谢,这是我的代码
import numpy as np
import cv2
img = cv2.imread('lenna.png',cv2.IMREAD_COLOR)
cv2.circle(img,(312,237), 63, (0,0,0),2)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
您可以在此脚本中裁剪圆形
import cv2
import numpy as np
img = cv2.imread('test2.jpg', cv2.IMREAD_COLOR)
x=256
y=256
r=63
# crop image as a square
img = img[y:y+r*2, x:x+r*2]
# create a mask
mask = np.full((img.shape[0], img.shape[1]), 0, dtype=np.uint8)
# create circle mask, center, radius, fill color, size of the border
cv2.circle(mask,(r,r), r, (255,255,255),-1)
# get only the inside pixels
fg = cv2.bitwise_or(img, img, mask=mask)
mask = cv2.bitwise_not(mask)
background = np.full(img.shape, 255, dtype=np.uint8)
bk = cv2.bitwise_or(background, background, mask=mask)
final = cv2.bitwise_or(fg, bk)
cv2.imshow('image',final)
cv2.waitKey(0)
cv2.destroyAllWindows()
这是解决方案:
假设圆的中心为(a1,b1)
,半径为r
。那么裁剪坐标将会是[ a1-r:a1+r , b1-r:b1+r ]
。
import numpy as np
import cv2
img = cv2.imread('lenna.png',cv2.IMREAD_COLOR)
a1=256
b1=256
r=63
cv2.circle(img,(a1,b1), r, (0,0,0),2)
result = img[a1-r:a1+r,b1-r:b1+r]
cv2.imshow('image',img)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destroyAllWindows()