OpenCv按比例裁剪

import cv2
import glob

#i = 0
for jpgfile in glob.glob(r'data\*.jpg'):
    print(jpgfile[5:-4])
    image = cv2.imread(jpgfile)
    #print(image)
    #裁剪
    # print(image.shape[0])
    # print(image.shape[1])
    hight = int(image.shape[0])
    width = int(image.shape[1])
    dst = image[int(0.05*hight):int(0.95*hight),int(0.1*hight):int(0.9*width)]
    # if image.shape[0] > image.shape[1]:#高>长
    #      dst = image[18:328,28:488]
    # else:
    #      dst = image[28:488, 18:328]
    #缩放
    dst = cv2.resize(dst,(224,224),interpolation = cv2.INTER_AREA)
    #jpgfile[5:-4],data\0a00ffa6e56d054384003832d8b490b2.jpg
    cv2.imwrite('new_data\{}.jpg'.format(jpgfile[5:-4]),dst)
### 使用 OpenCV 进行图像裁剪OpenCV 中,图像可以被看作是一个多维数组(`cv::Mat`),因此可以通过访问这个数组的特定部分来进行裁剪操作。对于给定的一张图片,通过指定矩形区域的位置和大小即可完成裁剪。 #### Python 实现代码示例: ```python import cv2 # 加载原始图像 image = cv2.imread('example.jpg') # 获取图像的高度和宽度 height, width = image.shape[:2] # 定义要裁剪的矩形区域位置 (左上角坐标) 和尺寸 rect_x, rect_y = 50, 50 # 左上角起点坐标 crop_width, crop_height = 200, 200 # 裁剪区域宽高 # 执行裁剪操作 cropped_image = image[rect_y : rect_y + crop_height, rect_x : rect_x + crop_width] # 展示结果 cv2.imshow("Cropped Image", cropped_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码实现了从一张名为 `example.jpg` 的图片中裁剪出一个位于 `(50, 50)` 开始、大小为 `200x200` 像素的新图像[^2]。 如果希望根据不同的输入自动适应不同分辨率下的中心区域裁剪,则可以根据图像的实际尺寸计算所需的边界值并应用上述方法[^3]。 为了进一步说明如何灵活控制裁剪比例以及保持纵横比不变的情况下调整最终输出图像的大小,在这里也给出相应的例子: ```python import cv2 def resize_and_center_crop(image_path, output_size=(256, 256)): """加载图像,按指定目标尺寸居中裁剪""" img = cv2.imread(image_path) h, w = img.shape[:2] shortest_side = min(h, w) # 计算中心点偏移量以确保裁剪后的图像是正方形且处于中间位置 offset_h = max((h - shortest_side)//2, 0) offset_w = max((w - shortest_side)//2, 0) # 正方形裁剪 square_cropped_img = img[offset_h:h-offset_h, offset_w:w-offset_w] # 缩放到期望的目标尺寸 resized_img = cv2.resize(square_cropped_img, dsize=output_size, interpolation=cv2.INTER_AREA) return resized_img resized_output = resize_and_center_crop('input_image.png') cv2.imwrite('output_resized.png', resized_output) ``` 此函数会先找到最小边长作为基准进行正方形裁剪,再利用 `cv2.resize()` 函数将得到的结果缩放至固定尺寸,从而既保留了重要的视觉特征又满足了后续处理的需求[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值