Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
如何在cv2 python中从遮罩裁剪面积_Python_Image_Opencv - Fatal编程技术网

如何在cv2 python中从遮罩裁剪面积

如何在cv2 python中从遮罩裁剪面积,python,image,opencv,Python,Image,Opencv,我有黑屏和白球的视频 我想在每一帧中跟踪白球的中心(输出为x,y坐标)。因此,我尝试使用cv2.HoughCircles,但无论我如何调整参数,我都无法获得100%的跟踪 所以我有另一个想法。因为当平均每个像素的圆形状将得到圆心点。我决定试试那个主意。但是循环每个像素直到我们发现白色是不可行的。有没有办法裁剪(粗略地)只得到白色的圆形像素?(例如,我的图像分辨率为1920x1080,但球的大小不会超过50x50像素。因此,在python中处理它会太慢。那么有没有办法将图像中的区域裁剪到50x50

我有黑屏和白球的视频 我想在每一帧中跟踪白球的中心(输出为x,y坐标)。因此,我尝试使用
cv2.HoughCircles
,但无论我如何调整参数,我都无法获得100%的跟踪

所以我有另一个想法。因为当平均每个像素的圆形状将得到圆心点。我决定试试那个主意。但是循环每个像素直到我们发现白色是不可行的。有没有办法裁剪(粗略地)只得到白色的圆形像素?(例如,我的图像分辨率为1920x1080,但球的大小不会超过50x50像素。因此,在python中处理它会太慢。那么有没有办法将图像中的区域裁剪到50x50大小?

没关系,我有了它。 这是我的解决办法

hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower_white = np.array([0,0,150], dtype=np.uint8)
upper_white = np.array([0,0,255], dtype=np.uint8)
mask = cv2.inRange(hsv, lower_white, upper_white)

indcies = np.nonzero(mask)
size = len(set(zip(indcies[0], indcies[1])))
avgX, avgY = 0, 0
minX, minY = 10000, 10000
maxX, maxY = -1, -1

for (x, y) in set(zip(indcies[0], indcies[1])):
    minX, minY, maxX, maxY = min(minX, x), min(minY, y), max(maxX, x), max(maxY, y)
    avgX += x
    avgY += y
avgX /= size
avgY /= size
radius = int(round(max(maxX - minX, maxY - minY)/2))
cv2.circle(image,(int(round(avgY)),int(round(avgX))),radius,(0,255,0),2)
plt.imshow(image)
plt.show()
参考:


所谓黑白图像,我指的是绝对黑色(0,0,0)和白色(255,255,255)。根据您的描述,霍夫圆似乎应该可以工作。但可能是你寻找白色斑点的方法会更快。注意:裁剪区域是(minX,minY)到(maxX,maxY)