鱼C论坛

 找回密码
 立即注册
查看: 2499|回复: 3

请帮忙解决报错问题,并在原代码上更正。谢谢

[复制链接]
发表于 2023-8-8 10:55:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码:
# import cv2
# import numpy as np
# from tifffile import imread, imwrite
# from skimage import filters, feature, color, morphology
# import matplotlib.pyplot as plt
# import numpy as np
# # 1. 分割遥感影像为多块图幅
# def split_image(image, num_rows, num_cols):
#     height, width = image.shape[:2]
#     row_height = height // num_rows
#     col_width = width // num_cols
#     images = []
#     for r in range(num_rows):
#         for c in range(num_cols):
#             start_row = r * row_height
#             end_row = start_row + row_height
#             start_col = c * col_width
#             end_col = start_col + col_width
#             sub_image = image[start_row:end_row, start_col:end_col]
#             images.append(sub_image)
#     return images
# # 2. 分别对每块图幅转为灰度图像
# def convert_to_grayscale(images):
#     grayscale_images = []
#     for image in images:
#         gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#         grayscale_images.append(gray_image)
#     return grayscale_images
# # 3. 使用其他边缘检测方法
# # canny算子
# def edge_detection(images):
#     edges = []
#     for image in images:
#         edges_image = cv2.Canny(image, 3, 12)  # 调整阈值根据实际情况
#         edges.append(edges_image)
#     return edges
#
# # sobel算子
# # def edge_detection(images):
# #     edges = []
# #     for image in images:
# #         # 使用其他边缘检测方法,这里以Sobel算子为例
# #         gradient_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
# #         gradient_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
# #         edges_image = cv2.magnitude(gradient_x, gradient_y)
# #         edges.append(edges_image)
# #     return edges
#
# # # 拉普拉斯算子
# # def edge_detection(images):
# #         edges = []
# #         for image in images:
# #             edges_image = cv2.Laplacian(image, cv2.CV_8U)
# #             edges.append(edges_image)
# #         return edges
#
# # 4. 消除噪声干扰
# def denoise(images):
#     denoised_images = []
#     for image in images:
#         # 使用其他滤波方法,这里以高斯滤波为例
#         denoised_image = cv2.GaussianBlur(image, (5, 5), 0)
#         denoised_images.append(denoised_image)
#     return denoised_images
# # 5. 将各个图幅合并为一个图幅
# def merge_images(images, num_rows, num_cols):
#     row_height, col_width = images[0].shape[:2]
#     merged_image = np.zeros((row_height * num_rows, col_width * num_cols), dtype=np.uint8)
#     i = 0
#     for r in range(num_rows):
#         for c in range(num_cols):
#             start_row = r * row_height
#             end_row = start_row + row_height
#             start_col = c * col_width
#             end_col = start_col + col_width
#             merged_image[start_row:end_row, start_col:end_col] = images[i]
#             i += 1
#     return merged_image
# # 6. 导出结果
# def export_result(image, filename):
#     cv2.imwrite(filename, image)
# # 加载遥感影像
# image = imread(r"C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\1=quick_dom.tif")
# # 1. 分割遥感影像为多块图幅
# num_rows = 3
# num_cols = 7
# sub_images = split_image(image, num_rows, num_cols)
# # 2. 分别对每块图幅转为灰度图像
# gray_images = convert_to_grayscale(sub_images)
# # 3. 使用其他边缘检测方法代替Canny算法
# edges = edge_detection(gray_images)
# # 4. 消除噪声干扰
# denoised_edges = denoise(edges)
# # 5. 将各个图幅合并为一个图幅
# merged_image = merge_images(denoised_edges, num_rows, num_cols)
# # 6. 导出结果
# export_result(merged_image, 'path_to_output1.jpg')



import cv2
import numpy as np
from tifffile import imread, imwrite
from skimage import filters, feature, color, morphology
import matplotlib.pyplot as plt
import numpy as np
# 1. 分割遥感影像为多块图幅
def split_image(image, num_rows, num_cols):
    height, width = image.shape[:2]
    row_height = height // num_rows
    col_width = width // num_cols
    images = []
    for r in range(num_rows):
        for c in range(num_cols):
            start_row = r * row_height
            end_row = start_row + row_height
            start_col = c * col_width
            end_col = start_col + col_width
            sub_image = image[start_row:end_row, start_col:end_col]
            images.append(sub_image)
    return images
# 2. 分别对每块图幅转为灰度图像
def convert_to_grayscale(images):
    grayscale_images = []
    for image in images:
        gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        grayscale_images.append(gray_image)
    return grayscale_images

# 自适应阈值二值化
edges=[]
for image in images:
    window_size = 7  # 窗口大小
    k = 0.1  # 控制阈值的参数
    for i in range(window_size // 2, image.shape[0] - window_size // 2):
        for j in range(window_size // 2, image.shape[1] - window_size // 2):
            window = image[i - window_size // 2:i + window_size // 2 + 1, j - window_size // 2:j + window_size // 2 + 1]
            threshold = np.mean(window) - k * np.std(window)
            if image[i, j] > threshold:
                edges[i, j] = 255
return edges

# 4. 消除噪声干扰
def denoise(images):
    denoised_images = []
    for image in images:
        # 使用其他滤波方法,这里以高斯滤波为例
        denoised_image = cv2.GaussianBlur(image, (5, 5), 0)
        denoised_images.append(denoised_image)
    return denoised_images
# 5. 将各个图幅合并为一个图幅
def merge_images(images, num_rows, num_cols):
    row_height, col_width = images[0].shape[:2]
    merged_image = np.zeros((row_height * num_rows, col_width * num_cols), dtype=np.uint8)
    i = 0
    for r in range(num_rows):
        for c in range(num_cols):
            start_row = r * row_height
            end_row = start_row + row_height
            start_col = c * col_width
            end_col = start_col + col_width
            merged_image[start_row:end_row, start_col:end_col] = images[i]
            i += 1
    return merged_image
# 6. 导出结果
def export_result(image, filename):
    cv2.imwrite(filename, image)
# 加载遥感影像
image = imread(r"C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\1=quick_dom.tif")
# 1. 分割遥感影像为多块图幅
num_rows = 3
num_cols = 7
sub_images = split_image(image, num_rows, num_cols)
# 2. 分别对每块图幅转为灰度图像
gray_images = convert_to_grayscale(sub_images)
# 3. 使用其他边缘检测方法代替Canny算法
edges = edge_detection(gray_images)
# 4. 消除噪声干扰
denoised_edges = denoise(edges)
# 5. 将各个图幅合并为一个图幅
merged_image = merge_images(denoised_edges, num_rows, num_cols)
# 6. 导出结果
export_result(merged_image, 'path_to_output1.jpg')

报错:
Traceback (most recent call last):
  File "C:\Users\WINDOWS\Desktop\taiyuan\python\seg2.py", line 185, in <module>
    gray_images = convert_to_grayscale(sub_images)
  File "C:\Users\WINDOWS\Desktop\taiyuan\python\seg2.py", line 140, in convert_to_grayscale
    if image[i, j] > threshold:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-3 08:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表