【问题标题】:Why does this OpenCV threshold call return a blank image?为什么这个 OpenCV 阈值调用返回一个空白图像?
【发布时间】:2020-12-14 19:36:41
【问题描述】:

我正在关注 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, 255, cv2.THRESH_BINARY_INV)[1]
cv2.imshow("Thresh", thresh)
cv2.waitKey()

然而,图像thresh 显示为一个浅灰色背景的空白窗口,本教程应该在其中包含教程源代码附带的图像的单色配置文件。

我使用相同的代码和相同的输入图像,但教程告诉我期待显示对象轮廓的单色图像,而我只得到一个空白的灰色图像。这里有什么问题?

【问题讨论】:

  • 使用 min = 255 和 max = 255 的阈值有点奇怪....只需检查您的灰度图像灰度值以确定正确的阈值。 (您也可以发布您的图片)
  • 如果您不知道要使用什么阈值(较低的值),请从中间点 128 开始。然后根据需要进行调整。或者尝试自动 Otsu 阈值。

标签: python python-3.x opencv graphics opencv3.0


【解决方案1】:

您的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。

因此结果是一个空白图像。

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

例如:

      原始图像                                                  阈值图像

import cv2

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

【讨论】:

    猜你喜欢
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2021-01-19
    • 2014-11-18
    相关资源
    最近更新 更多