python-opencv裁剪tif遥感影像
最近在做关于遥感影像变化检测的作业,影像太大了,首先需要对遥感影像进行裁剪。
import cv2 as cv
src=cv.imread('before.tif')
print(src.shape)
cropImg = src[600:1100,600:1100]
cv.imwrite("./be.tif",cropImg)
print(cropImg.shape)
输出:
(15354, 32507, 3)
(500, 500, 3)
切片给出的坐标为需要裁剪的图片在原图片上的坐标,顺序为[y0:y1, x0:x1],其中原图的左上角是坐标原点。
参考博客:Python实现图片裁剪的两种方式——Pillow和OpenCV
补一个读文件函数,做笔记用
import cv2
#读取文件函数,返回变化前,变化后以及变化结果
def get_files(filename):
before=cv2.imread('./data/before.tif',-1)
after=cv2.imread('./data/after.tif',-1)
change_label=cv2.imread('./data/change_label.tif ',-1)
# print(before.dtype) 原格式是unit8
#转换成数组以及float16. 并不明白为什么要转换数据格式
before = np.array(before).astype(np.float16)
after = np.array(after).astype(np.float16)
change_label = np.array(change_label).astype(np.float16)
return before,after,change_label
#读取文件函数检验
data_dir = './data'
before,after,change_label = get_files(data_dir)
print('before data shape: ', before.shape)
print('after labels shape: ',after.shape)
print('change_label labels shape: ',change_label.shape)
IMREAD_UNCHANGED = -1#不进行转化,比如保存为了16位的图片,读取出来仍然为16位。 IMREAD_GRAYSCALE = 0#进行转化为灰度图,比如保存为了16位的图片,读取出来为8位,类型为CV_8UC1。 IMREAD_COLOR = 1#进行转化为RGB三通道图像,图像深度转为8位 IMREAD_ANYDEPTH = 2#保持图像深度不变,进行转化为灰度图。 IMREAD_ANYCOLOR = 4#若图像通道数小于等于3,则保持原通道数不变;若通道数大于3则只取取前三个通道。图像深度转为8位
转载自:https://blog.csdn.net/woshidakeai/article/details/86300596