python - 如何使用掩码计算直方图 OPENCV?

标签 python opencv image-processing computer-vision histogram

我只需要在图像的一部分上计算直方图,但该部分具有圆形(如圆盘)。我创建蒙版以在图像上找到该部分

    cv2.rectangle(mask,(0, 0), (width, height), (0,0,0), -1)
    cv2.circle(mask,(int(avgkrug[0]),int(avgkrug[1])),radijusp2,(255,255,255),-1)
    cv2.circle(mask,(int(avgkrug[0]),int(avgkrug[1])),radijusp1,(0,0,0),-1)

使用上面的代码,我找到了我感兴趣的“圆盘形”区域。 现在我正在尝试计算直方图:

 for ch, col in enumerate(color):
    hist_item = cv2.calcHist([img],[ch],mask,[256],[0,255])
    ...

但是出现了这个错误

 error: (-215) !mask.data || mask.type() == CV_8UC1 in function cv::calcHist

但是,如果我将掩码保存在 dics 上并使用 cv2.imread() 读取它,则不会出现此错误。 我也试过使用这条线

  hist_item = cv2.calcHist([slika],[ch],mask.astype(np.uint8),[256],[0,255])

如何使用我创建的掩码来计算直方图,这样我就不需要从光盘上 w/r 了?

最佳答案

您创建的掩码需要是 uint8 类型,因此在创建掩码时将其设为 uint8,然后将其传递给计算直方图。

mask = np.zeros(image.shape[:2], dtype="uint8")

现在通过传递原始图像和相应的掩码来计算直方图。

hist_item = cv2.calcHist([image],[ch],mask,[256],[0,255])

关于python - 如何使用掩码计算直方图 OPENCV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21082884/

相关文章:

php - 如何通过 MySQL 表将 Python 列表转换为 PHP 数组

python - 加入两个图像

java - Android 中图像的显着性检测

image - 使用 Processing 保存图像

python - logits 和 labels must be broadcastable error in Tensorflow RNN

jquery - 通过 wtform 字段获取数据迭代

python - 没有检查约束的 Alembic 自动生成迁移

c++ - OpenCV 标识符 "Tracker"未定义

OpenCV 窗口总是在最上面

c# - 识别手写形状