为什么此OpenCV阈值调用返回空白图像?

问题描述

我正在OpenCV上关注本教程,该教程使用以下代码

import argparse
import imutils
import cv2

ap = argparse.ArgumentParser()
ap.add_argument("-i","--image",required=True,help="path to input image")
args = vars(ap.parse_args())

image = cv2.imread(args["image"])
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

thresh = cv2.threshold(gray,255,cv2.THRESH_BINARY_INV)[1]
cv2.imshow("Thresh",thresh)
cv2.waitKey()

然而,图像thresh显示为具有浅灰色背景的空白窗口,在本教程中,本教程应该使用本教程源代码随附的图像的单色配置文件

我使用相同的代码和相同的输入图像,但是本教程告诉我期望显示对象轮廓的单色图像,而我只得到空白的灰色图像。这里可能出什么问题了?

解决方法

您的thresh参数值应与maxval值不同。

thresh = cv2.threshold(src=gray,thresh=127,maxval=255,type=cv2.THRESH_BINARY_INV)[1]

documentation

  • gray是您的源图像。
  • thresh是阈值
  • maxval是最大值
  • type是阈值类型

如果将threshmaxval设置为相同的值,则说明:

我想显示超过255个值的像素,但所有像素都不应超过255个。

因此结果是空白图像。

一种可能的方法是将阈值设置为127。

例如:

原始图像阈值图像

enter image description here enter image description here

import cv2

image = cv2.imread("fgtc7_256_256.jpg")
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(src=gray,type=cv2.THRESH_BINARY_INV)[1]
cv2.imshow("Thresh",thresh)
cv2.waitKey(0)