코드 조각은 다음과 같습니다.
# 将图片转换为灰度图
image1 = cv2.cvtColor(origin_iamge, cv2.COLOR_BGR2GRAY)
image2 = cv2.cvtColor(sp_image, cv2.COLOR_BGR2GRAY)
image3 = cv2.cvtColor(sp1_image, cv2.COLOR_BGR2GRAY)
mse_1 = mse(image1, image2)
mse_2 = mse(image1, image3)
ssim_1 = ssim(image1, image2)
ssim_2 = ssim(image1, image3)
내 코드에 오류가 있습니다:
(PyTorch) D:\CodeProject>D:/Anaconda/envs/PyTorch/python.exe d:/CodeProject/2023_SZ_Cup/Problem_1/evaluate.py
Traceback (most recent call last):
File "d:\CodeProject\2023_SZ_Cup\Problem_1\evaluate.py", line 20, in <module>
image1 = cv2.cvtColor(origin_iamge, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.8.0) :-1: error: (-5:Bad argument) in function 'cvtColor'
> Overload resolution failed:
> - src is not a numpy array, neither a scalar
> - Expected Ptr<cv::UMat> for argument 'src'
이미지가 원래 경로에서 로드되어 회색조로 변환될 때 cv2.cvtColor에 전달된 매개 변수가 올바르지 않기 때문에 'cvtColor' 함수에서 cv2.error: (-5:Bad 인수)라는 오류 메시지가 표시됩니다.
코드를 수정하세요:
image1 = cv2.imread(origin_image_path, cv2.IMREAD_GRAYSCALE)
image2 = cv2.imread(sp_image_path, cv2.IMREAD_GRAYSCALE)
image3 = cv2.imread(sp1_image_path, cv2.IMREAD_GRAYSCALE)
주요 변경 사항은 다음과 같습니다.
- 이미지 경로를 매개변수로 cv2.imread 함수에 전달하여 이미지를 올바르게 로드합니다.
- 이미지가 회색조 이미지로 읽히도록 하려면 cv2.IMREAD_GRAYSCALE 플래그를 사용하십시오.
그러나 코드는 여전히 오류를 보고합니다.
(PyTorch) D:\CodeProject>D:/Anaconda/envs/PyTorch/python.exe d:/CodeProject/2023_SZ_Cup/Problem_1/evaluate.py
[ WARN:0@0.328] global loadsave.cpp:248 cv::findDecoder imread_('./2023_SZ_Cup/datasets/B棰?Traceback (most recent call last):
File "d:\CodeProject\2023_SZ_Cup\Problem_1\evaluate.py", line 21, in <module>
mse_1 = mse(image1, image2)
File "d:\CodeProject\2023_SZ_Cup\Problem_1\evaluate.py", line 7, in mse
err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
AttributeError: 'NoneType' object has no attribute 'astype'
이 오류 메시지는 이미지를 읽을 때 문제가 있음을 나타내며, 이미지가 올바르게 로드되지 않아 후속 이미지 처리 시 오류가 발생할 수 있음을 나타냅니다.
이미지를 읽은 후 오류 검사를 추가하여 이미지가 성공적으로 로드되었는지 확인할 수 있습니다. 더 나은 디버깅을 위해 오류 검사 및 인쇄가 추가된 수정된 코드는 다음과 같습니다.
# 读取图片并转换为灰度图
image1 = cv2.imread(origin_image_path, cv2.IMREAD_GRAYSCALE)
image2 = cv2.imread(sp_image_path, cv2.IMREAD_GRAYSCALE)
image3 = cv2.imread(sp1_image_path, cv2.IMREAD_GRAYSCALE)
if image1 is None or image2 is None or image3 is None:
print("无法加载图像")
else:
mse_1 = mse(image1, image2)
mse_2 = mse(image1, image3)
ssim_1 = ssim(image1, image2)
ssim_2 = ssim(image1, image3)
print("-----调包-----")
print('MSE:', mse_1)
print('ssim:', ssim_1)
print("-----算法-----")
print('MSE:', mse_2)
print('ssim:', ssim_2)
코드는 결국 문제를 지적하게 됩니다.
[ WARN:0@0.312] global loadsave.cpp:248 cv::findDecoder imread_('./2023_SZ_Cup/datasets/B棰?无法加载图像
이름만 바꾸세요! 더 이상 오류가 없습니다.