|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
请大家帮忙写出正确的代码,谢谢
代码:
from tifffile import imread
import numpy as np
from osgeo import gdal, osr
import cv2
# 读取TIFF格式无人机影像数据
image_path = 'F:\duneline\dune\dune.tif'
output_path = 'overlay_image.tif'
image = imread(image_path)
# 将输入图像转换为灰度图像
gray_image = np.mean(image, axis=2)
# 自适应阈值二值化
binary = np.zeros_like(gray_image, dtype=np.uint8)
window_size = 7 # 窗口大小
k = 0.1 # 控制阈值的参数
for i in range(window_size//2, gray_image.shape[0]-window_size//2):
for j in range(window_size//2, gray_image.shape[1]-window_size//2):
window = gray_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 gray_image[i, j] > threshold:
binary[i, j] = 255
# 使用Canny边缘检测
edges = cv2.Canny(gray_image, 30, 100)
# 对边缘图像应用形态学操作
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
dilated_edges = cv2.dilate(edges, kernel, iterations=1)
closing = cv2.morphologyEx(dilated_edges, cv2.MORPH_CLOSE, kernel, iterations=3)
# 配置输出的空间参考信息
in_ds = gdal.Open(image_path)
projection = in_ds.GetProjection()
geotransform = in_ds.GetGeoTransform()
# 创建新的输出图像
driver = gdal.GetDriverByName('GTiff')
out_ds = driver.Create(output_path, image.shape[1], image.shape[0], 1, gdal.GDT_Byte, options=['COMPRESS=NONE']) # 修改数据类型为gdal.GDT_Byte
# 设置输出图像的空间参考信息
out_ds.SetProjection(projection)
out_ds.SetGeoTransform(geotransform)
# 将沙脊线部分写入输出图像
out_band = out_ds.GetRasterBand(1)
out_band.WriteArray(closing) # 修改为正确的数据类型
# 设置颜色表
color_table = gdal.ColorTable()
color_table.SetColorEntry(0, (0, 0, 0, 0)) # 黑色,对应值为0
color_table.SetColorEntry(255, (255, 255, 255, 255)) # 白色,对应值为255
out_band.SetColorTable(color_table)
# 释放资源
out_band.FlushCache()
out_ds = None
in_ds = None
print("保存成功!")
报错:
Traceback (most recent call last):
File "F:/duneline/duneline.py", line 253, in <module>
edges = cv2.Canny(gray_image, 30, 100)
cv2.error: OpenCV(3.4.10) C:\projects\opencv-python\opencv\modules\imgproc\src\canny.cpp:829: error: (-215:Assertion failed) _src.depth() == CV_8U in function 'cv::Canny'
Process finished with exit code 1 |
|