繁体   English   中英

转换成灰度后仍然不能在 OpenCV 中使用 cv.equalizeHist()。 给出错误:(-215:断言失败)_src.type()== CV_8UC1

[英]Still after convertion into grayscale can not use cv.equalizeHist() in OpenCV. Gives error: (-215:Assertion failed) _src.type() == CV_8UC1

我正在尝试使用cv.equaliazeHist() function 但它给了我这样的error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\histogram.cpp:3439: error: (-215:Assertion failed) _src.type() == CV_8UC1 in function 'cv::equalizeHist'

在尝试使用cv.equaliazeHist() ,我还将图像转换为灰度。 仍然收到此错误。 但是如果我在读取灰度图像代码时使用cv.IMREAD_GRAYSCALE运行良好,尽管我的图像已经是灰度的。

import glob
import cv2 as cv
import matplotlib.pyplot as plt
import os
import numpy as np

    images=[cv.imread(file) for file in sorted(glob.glob(r"C:\Users\USER\Handcrafted dataset\raw/*.jpg"))]
    for img in images:
        b,g,r = cv.split(img) 
        rgb_img = cv.merge([r,g,b]) 
        plt.figure(figsize=(5,5))
        plt.imshow(rgb_img)

转换为灰度:

di=r"C:\Users\USER\Handcrafted dataset\gray_scale"
for i,img in enumerate(images):
    b,g,r = cv.split(img) 
    rgb_img = cv.merge([r,g,b])
    gray_img = cv.cvtColor(rgb_img,cv.COLOR_RGB2GRAY)
    plt.figure(figsize=(5,5))
    print(i)
    plt.imshow(gray_img,cmap='gray')
    cv.imwrite(di+"\\"+ "%06d.jpg" % i,gray_img.astype(np.uint8))

试图均衡:

images2=[cv.imread(file) for file in sorted(glob.glob(r"C:\Users\USER\Handcrafted dataset\gray_scale/*.jpg"))]
dir2=r"C:\Users\USER\Handcrafted dataset\adaptive"

for i,img in  enumerate(images2):

    ad_img=cv.equalizeHist(img)
    plt.figure(figsize=(5,5))
    plt.imshow(ad_img,cmap='gray')
    cv.imwrite(dir2+"\\"+ "%06d.jpg" % i,ad_img.astype(np.uint8)) #adaptibe histogram

您的最后一个代码块不应该工作,因为您正在读取图像(rgb)并尝试在不转换为灰度的情况下进行均衡,并且cv2.equalizeHist需要单个通道。

在任何情况下,您都可以通过阅读这样的图片来跳过“转换为灰度”步骤: img = cv2.imread(file_name, 0)

无论如何,以下代码对我有用,既可以转换为灰度,也可以直接以灰度读取:

import cv2
file_name = '/path/to/my/picture.jpg'

# Read original image
img = cv2.imread(file_name)
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) # Convert to grayscale

# Equalize and show
eq_img = cv2.equalizeHist(gray_img)
cv2.imshow('equalized', eq_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

### Read on grayscale + equalize + show ###
img = cv2.imread(file_name, 0)
eq_img=cv2.equalizeHist(img)
cv2.imshow('equalized', eq_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

(我使用的是 openCV 3.2.0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM