【问题标题】:Grayscale image segmentation灰度图像分割
【发布时间】:2014-08-28 17:24:04
【问题描述】:

我正在尝试分割从现场测量生成的灰度图片,这就是为什么它不是传统的 3 通道图片。

我试过这段代码:

import cv2 #this is the openCV library
import numpy as np

# some code to generate img

ret,thresh = cv2.threshold(img ,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

它会吐出这个错误:

cv2.error: ..\..\..\modules\imgproc\src\thresh.cpp:719: error: (-215) src.type() == CV_8UC1 in function cv::threshold

我不知道如何解决这个问题,因为用法似乎很简单,所以欢迎任何想法。

【问题讨论】:

  • 你是如何创建图像的?
  • 基本上它是一个从其中的稀疏值插值的矩阵。所以 img 是一个矩阵

标签: python opencv image-processing


【解决方案1】:

错误是由于thresh.cpp 中的以下断言语句CV_Assert( src.type() == CV_8UC1 ); 造成的,这意味着您的输入图像不是CV_8UC1 类型。

因此,请确保您生成的输入图像 img 实际上是 CV_8UC1(一个通道 8 位图像)。

【讨论】:

  • 我该如何进行转换?可以用 img.astype(cv2.CV_8UC1) 吗??
  • 这取决于img的类型。你输入的图片img是什么类型的?
  • 您可以使用cv2.convertScaleAbs进行转换。请参阅Documentation. 或者您可以编写您的代码进行转换。确保您了解不同的 Mat 类型以及它们如何存储在内存中。例如,8 位可以表示 0 到 255 的像素值,你如何将 1300 的浮点值转换为 8 位值。这需要以某种方式缩放浮点值以适应 0-255 范围。
【解决方案2】:

所以问题确实出在图像类型上,因为它包含需要标准化为 0 ~ 255 的双精度值。

在我的情况下,1000 是可能的最大值

img = cv2.convertScaleAbs(img / 1000.0 * 255)

这对我有用。

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2015-03-03
    • 2022-10-17
    相关资源
    最近更新 更多