Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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 将图像转换为二进制格式';t显示足球场的白线_Python_Opencv_Image Processing_Cv2_Image Thresholding - Fatal编程技术网

Python 将图像转换为二进制格式';t显示足球场的白线

Python 将图像转换为二进制格式';t显示足球场的白线,python,opencv,image-processing,cv2,image-thresholding,Python,Opencv,Image Processing,Cv2,Image Thresholding,我的灵感来自以下几点,但我正在努力完成第2/3步。 我想根据阈值从灰度图像创建一个二值图像,并最终显示图像上的所有白线。我希望的输出如下所示: 首先,我想使用颜色阈值和形态学来分离足球场 def isolate_field(img): hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # find green pitch light_green = np.array([40, 40, 40]) dark_green = np.arr

我的灵感来自以下几点,但我正在努力完成第2/3步。 我想根据阈值从灰度图像创建一个二值图像,并最终显示图像上的所有白线。我希望的输出如下所示:

首先,我想使用颜色阈值和形态学来分离足球场

def isolate_field(img):
   hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

   # find green pitch
   light_green = np.array([40, 40, 40])
   dark_green = np.array([70, 255, 255])
   mask = cv2.inRange(hsv, light_green, dark_green)

   # removing small noises
   kernel = np.ones((5, 5), np.uint8)
   opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

   # apply mask over original frame
   return cv2.bitwise_and(frame, frame, mask=opening)
这将提供以下输出:

到目前为止,我对结果很满意,但由于阴影太大,当我对图片进行
grayscale
。因此,二值阈值基于左上角的阳光部分,而不是足球场周围的白线

按照上的方法,我得到了以下简单阈值的输出:

和自适应阈值:

最后,大津的阈值:

我如何才能确保白线变得更清晰?我正在考虑裁剪帧,这样我只看到字段,然后使用基于白色的遮罩。不幸的是,那没有成功


非常感谢您的帮助,

您可以修改范围中的
以排除饱和颜色(即绿色)。我没有你的原始图像,所以我使用了你的中间结果:


范围内的
inRange
的结果是您想要的二进制图像。我希望你能用原始图像获得更好的效果。我在图片中使用了,这使得搜索好的HSV值变得容易

您还可以检查cv2.equalizeHist(src)是否工作。从我以前的核磁共振成像经验来看,它在那些明亮的部分对我来说非常好。没有原始图像,我们无法进行实验。