转换为灰度后仍然不能在OpenCV中使用cv.equalizeHist()。给出错误:(215:断言失败)\u src.type()==CV\u 8UC1

2024-10-05 14:31:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用cv.equaliazeHist()函数,但它给了我这样一个错误 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

Tags: in图像importimgforpltusersdataset
1条回答
网友
1楼 · 发布于 2024-10-05 14:31:42

您的最后一块代码不应该工作,因为您正在读取图像(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)

相关问题 更多 >