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

You may also like...

退出移动版