Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 opencv和python如何仅在圆形区域中交叉_Python 2.7_Opencv - Fatal编程技术网

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。