Python 2.7 opencv和python如何仅在圆形区域中交叉
我想只使用一个指向中心的点来进行圆形裁剪。最简单的方法是什么?谢谢我的代码Python 2.7 opencv和python如何仅在圆形区域中交叉,python-2.7,opencv,Python 2.7,Opencv,我想只使用一个指向中心的点来进行圆形裁剪。最简单的方法是什么?谢谢我的代码 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() 以下是解决方案: 假设圆心是(a1,b1),半径是r。然后
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()
以下是解决方案:
假设圆心是(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()
在这里,您可以从该脚本中裁剪圆
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()
为了清楚起见,生成的图像将始终是带圆的矩形。矩形是否与源图像大小相同?或者它的大小是圆的直径?理想情况下,您可以创建一个遮罩,并使用遮罩复制图像(因此只有圆形)。我需要一个大小与圆形直径相同的矩形。该代码仅在x和y相等时有效,但在更改x和y坐标时无效WAP x和y坐标。也许你做得不对。在opencv中,第一个坐标是y,第二个坐标是x。