error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor‘ & ValueError: operands could

一、错误1:error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’

error: OpenCV(4.8.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

报错的代码片段:

error                                     Traceback (most recent call last)
d:\CodeProject\37.帮助大家看代码\demo.ipynb 单元格 48 line 9
      6 image2 = cv2.imread('D:\CodeProject\37.帮助大家看代码\cropped_(0, 0, 121, 168)_obj365_val_000000105931.jpg')
      8 # 将图像转换为灰度图像
----> 9 gray_image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
     10 gray_image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
     12 # 计算图像的直方图

error: OpenCV(4.8.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

在这里插入图片描述
这个错误是由于在图像处理代码中的 cv2.cvtColor 函数中的输入图像为空(即_src.empty())而引起的。这通常表示 OpenCV 没有成功加载或读取指定的图像文件。为了解决这个问题,你可以考虑以下几个步骤:

  1. 检查文件路径:确保图像文件的路径是正确的,并且文件确实存在于指定的位置。你可以使用绝对路径或相对路径,但请确保路径是正确的。
  2. 检查文件格式:确保图像文件的格式是 OpenCV 支持的格式,如JPEG、PNG等。有时文件可能被损坏或使用不受支持的格式,这会导致读取失败。
  3. 检查图像加载:在读取图像之前,可以添加一些代码来检查图像是否成功加载。例如:
if image1 is None or image2 is None:
    print("无法加载图像文件。")
else:
    # 继续进行图像处理

这将帮助你确定是图像加载问题还是后续处理步骤导致的问题。

  • 尝试其他图像加载方式:如果上述方法都没有解决问题,可以尝试使用不同的图像加载方式,例如使用绝对路径或尝试加载其他图像文件来测试。
  • 检查 OpenCV 版本:有时,特定版本的 OpenCV 可能会有一些问题。尝试更新或降级 OpenCV 版本,看看是否有助于解决问题。
  • 确保 OpenCV 安装正确:如果你使用的是 pip 安装的 OpenCV,确保它正确安装并且没有依赖项问题。你可以尝试重新安装 OpenCV,或者查看安装日志以获取更多信息。

我更改了一下的文件路径:

在这里插入图片描述

不再报错,顺利输出结果!

二、错误2:ValueError: operands could not be broadcast together

第一次的代码为:

import cv2
import numpy as np

# 读取两个灰度图像
image1 = cv2.imread('./cropped_(0, 0, 121, 168)_obj365_val_000000105931.jpg', cv2.IMREAD_GRAYSCALE)
image2 = cv2.imread('./cropped_(0, 0, 135, 268)_obj365_val_000000433336.jpg', cv2.IMREAD_GRAYSCALE)

# 检查图像是否成功加载
if image1 is None or image2 is None:
    print("无法加载图像")
else:
    # 转换图像为 NumPy 数组
    array1 = np.array(image1)
    array2 = np.array(image2)

    # 计算曼哈顿距离
    manhattan_distance = np.sum(np.abs(array1 - array2))

    # 打印曼哈顿距离
    print("曼哈顿距离:", manhattan_distance)

运行时发现报错:

ValueError: operands could not be broadcast together with shapes (168,121) (268,135) 

在这里插入图片描述
这个错误是由于两个图像的尺寸不匹配而引起的。曼哈顿距离计算要求两个图像的尺寸必须相同。在你的示例中,两个图像的尺寸不同,因此无法直接计算曼哈顿距离。

要解决这个问题,我们需要确保要比较的两个图像具有相同的尺寸。可以通过调整图像的大小或裁剪它们,使它们具有相同的维度,然后再计算曼哈顿距离。以下是一个示例代码,演示如何将两个图像调整为相同的大小并计算曼哈顿距离:

import cv2
import numpy as np

# 读取两个灰度图像
image1 = cv2.imread('image1.jpg', cv2.IMREAD_GRAYSCALE)
image2 = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)

# 检查图像是否成功加载
if image1 is None or image2 is None:
    print("无法加载图像")
else:
    # 调整图像的大小为相同尺寸
    if image1.shape != image2.shape:
        image1 = cv2.resize(image1, (image2.shape[1], image2.shape[0]))

    # 转换图像为 NumPy 数组
    array1 = np.array(image1)
    array2 = np.array(image2)

    # 计算曼哈顿距离
    manhattan_distance = np.sum(np.abs(array1 - array2))

    # 打印曼哈顿距离
    print("曼哈顿距离:", manhattan_distance)

在这个示例中,我们首先检查两个图像的尺寸是否相同,如果不同,我们使用 cv2.resize 函数将其中一个图像调整为与另一个图像相同的大小。然后,我们将两个图像转换为NumPy数组,并计算曼哈顿距离。

不再报错,正常输出结果:

曼哈顿距离: 3715237

猜你喜欢

转载自blog.csdn.net/wzk4869/article/details/132858099