• 旋转之后截取图像


    1. prompt

    请用python写程序:
    1、输入一个-180180之间的整数a
    2、在当前图片内截取一个矩形
    3、矩形相对于原始图像旋转角度为a
    4、输出该矩形内的图片
    

    2. 实现代码

    import cv2  
    import numpy as np  
      
    def rotate_and_crop_image(image_path, angle):  
        # 读取图像  
        image = cv2.imread(image_path)  
        if image is None:  
            raise FileNotFoundError("无法找到或读取图像文件。")  
      
        # 获取图像的高度和宽度  
        (h, w) = image.shape[:2]  
      
        # 假设你想要截取的矩形在原始图像中的位置和大小(这里只是一个示例)  
        # 你可以根据需求调整这些值  
        rect_x = w // 4  
        rect_y = h // 4  
        rect_width = w // 2  
        rect_height = h // 2  
      
        # 计算旋转中心(这里使用图像中心)  
        center = (w // 2, h // 2)  
      
        # 获取旋转矩阵  
        M = cv2.getRotationMatrix2D(center, angle, 1.0)  
      
        # 执行旋转  
        rotated = cv2.warpAffine(image, M, (w, h))  
      
        # 计算旋转后矩形的新边界(这里需要更复杂的逻辑来找到精确边界)  
        # 但为了简化,我们假设旋转后的矩形仍然与原始矩形大小相同  
        # 并且使用原始矩形的中心作为旋转中心,这样可以保持矩形大小不变  
        # 但实际上,你可能需要计算旋转后矩形的四个角,并找到包含这些角的最小矩形  
      
        # 假设旋转后矩形的左上角坐标和大小与原始矩形相同(以旋转中心为参考)  
        rotated_rect_x = rect_x - center[0] + w // 2  
        rotated_rect_y = rect_y - center[1] + h // 2  
      
        # 确保坐标在旋转后图像的范围内  
        rotated_rect_x = max(0, rotated_rect_x)  
        rotated_rect_y = max(0, rotated_rect_y)  
        rotated_rect_width = min(rect_width, w - rotated_rect_x)  
        rotated_rect_height = min(rect_height, h - rotated_rect_y)  
      
        # 截取旋转后的矩形区域  
        cropped = rotated[rotated_rect_y:rotated_rect_y+rotated_rect_height, rotated_rect_x:rotated_rect_x+rotated_rect_width]  
      
        # 显示原始图像和截取后的图像  
        cv2.imshow("Original Image", image)  
        cv2.imshow("Rotated and Cropped Image", cropped)  
        cv2.waitKey(0)  
        cv2.destroyAllWindows()  
      
        # 如果需要保存截取后的图像  
        # cv2.imwrite('cropped_image.jpg', cropped)  
      
    # 示例使用  
    image_path = 'path_to_your_image.jpg'  # 替换为您的图像文件路径  
    angle = int(input("请输入一个-180到180之间的整数a: "))  
    rotate_and_crop_image(image_path, angle)
    
  • 相关阅读:
    【码蹄集新手村600题】强制类型转换的重要性
    vue中使用脚手架创建一个新项目
    sklearn.preprocessing.StandardScaler¶
    MySQL索引事务
    操作系统对设备的管理:I/O软件的结构层次
    NOSQL Redis Ubuntu系列 常用的配置 及密码登录
    java计算机毕业设计ssm企业日常事务管理系统sl5xl(附源码、数据库)
    textarea标签改写为富文本框编辑器KindEditor
    时间复杂度和空间复杂度详解
    PHP —— CI 框架实现微信小程序支付
  • 原文地址:https://blog.csdn.net/weixin_42828571/article/details/139481956