Justheartyoung 发表于 2023-8-3 21:15:30

cv2问题 谢谢大家

代码:
import cv2
import numpy as np
from matplotlib import pyplot as plt
image = cv2.imread('F:\\duneline\\1=quick_dom.tif', cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(image,cv2.CV_64F,1,0,ksize=5)# x
sobely = cv2.Sobel(image,cv2.CV_64F,0,1,ksize=5)# y
combined = cv2.bitwise_or(sobelx, sobely)
ret, binary = cv2.threshold(combined, 100, 255, cv2.THRESH_BINARY)
plt.imshow(binary, cmap='gray')
plt.show()
cv2.imwrite('ridge_lines.tiff', binary)
报错:
Traceback (most recent call last):
File "F:/duneline/duneline.py", line 5, in <module>
    sobelx = cv2.Sobel(image,cv2.CV_64F,1,0,ksize=5)# x
cv2.error: OpenCV(3.4.10) C:\projects\opencv-python\opencv\modules\imgproc\src\deriv.cpp:419: error: (-215:Assertion failed) !_src.empty() in function 'cv::Sobel'

isdkz 发表于 2023-8-3 21:15:36

这个错误是由于图像路径错误或图像加载失败导致的。请确保图像路径正确,并且图像文件存在。另外,还要确保使用的图像文件格式是OpenCV支持的格式,如JPEG、PNG等。如果问题仍然存在,可以尝试使用绝对路径来加载图像,或者检查图像文件是否损坏。

Mike_python小 发表于 2023-8-3 21:15:46

问题分析:

根据报错信息,错误发生在 cv2.Sobel 函数调用的地方。报错信息中提到 _src.empty(),意味着输入的图像为空。

解决方法:

1. 首先,确保指定的图像文件路径 'F:\\duneline\\1=quick_dom.tif' 是正确的,并且文件存在。你可以检查一下路径是否正确,并且使用其他图像文件来测试。

2. 然后,检查图像文件是否被正确加载。使用 cv2.imread 函数加载图像时,需要确保图像文件路径是正确的,并且文件格式被正确支持。你可以使用 print(image) 来查看图像加载的结果,如果结果显示为 None,则表示图像加载失败,可能需要检查文件路径或文件格式。

3. 如果图像加载成功,检查加载的图像是否为空。你可以使用 image.shape 来查看图像的形状。如果结果显示为 (0, 0),则表示图像为空。可能原因是图像文件损坏或加载错误。

综上所述,你可以检查图像文件路径、格式和加载情况,以及确保图像不为空。如果问题仍然存在,请提供更多信息,我将尽力帮助你解决问题。

学习编程中的Ben 发表于 2023-8-3 21:15:50

问题分析:

根据报错信息可以看出,错误发生在调用cv2.Sobel函数时。报错信息中提到了一个断言错误:(!_src.empty()),意味着输入图像为空。

解决方案:

1. 首先,确保你的图像路径是正确的。确认'F:\\duneline\\1=quick_dom.tif' 文件存在,并且可以被正常读取。如果文件路径不正确,将其更正为正确的路径。

2. 确保使用的图像格式是支持的图像格式。cv2.imread 默认会尝试以彩色图像模式读取图像。如果你的图像是灰度图像,将其读取为灰度图像可以避免后续操作中的错误。你可以使用以下代码读取灰度图像:
image = cv2.imread('F:\\duneline\\1=quick_dom.tif', cv2.IMREAD_GRAYSCALE)

3. 如果以上两个步骤没有解决问题,确认 image 是否为空。你可以添加以下代码来检查图片是否成功读取:
if image is None:
    print("无法读取图像")
    exit()

4. 检查图像的尺寸和通道数是否符合算子的要求。cv2.Sobel 函数要求输入图像的深度(depth)和通道数(ddepth)必须匹配。对于灰度图像,输入输出深度都应该是 cv2.CV_64F。

5. 最后,确保你的 OpenCV 版本是最新的。可以尝试更新 OpenCV 版本,或者使用其他版本的 OpenCV。

希望以上解决方案能够帮助你解决问题。如果问题仍然存在,请提供更多的信息和代码,以便我们进一步帮助你。

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}

琅琊王朝 发表于 2023-8-3 21:23:24

根据报错信息和代码推测,产生错误的原因是源图像 image 为空。这可能是由于无法正确加载图像文件 'F:\duneline\1=quick_dom.tif' 导致的。

请确保图像文件路径正确,文件存在,并且可以被 OpenCV 正确读取。你可以尝试使用绝对路径或相对于当前工作目录的相对路径。

此外,还要检查是否已正确安装了 OpenCV 库,并且版本与代码兼容。你可以尝试更新或重新安装 OpenCV 库来解决潜在的兼容性问题。

总结:请检查图像文件路径及其可读性,确保已正确安装并配置了 OpenCV 库。

tyh小号 发表于 2023-8-4 07:40:59

你的错误可能是因为你的图像路径中有非ASCII字符,导致cv2.imread无法正确读取图像。你可以尝试以下方法:

- 确保图像文件存在于你指定的路径中,没有被移动或重命名。
- 确保图像路径中没有空格或特殊符号,例如中文字符。
- 使用np.fromfile和cv2.imdecode来代替cv2.imread,例如:

def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), -1)
return cv_img

- 在调用cv2.cvtColor之前,打印img或img.shape来检查图像是否正确加载,例如:

img = cv_imread('F:\\duneline\\1=quick_dom.tif')
print(img.shape)

如果这些方法都不奏效,请提供更多的信息,例如你的操作系统,OpenCV版本,图像格式等。希望这些对你有帮助。
页: [1]
查看完整版本: cv2问题 谢谢大家