图像通用操作Python的实现

2023-11-10

      平时经常会对一个目录下的图像做统一处理,如缩放、旋转等等,之前使用C++处理,有时不是很方便。发现使用Python比较简单,代码量又很少,在Anacanda下执行起来也比较方便。因此,打算在后面遇到图像的常规处理时都将其实现放入到同一个py文件中,用时可随时执行。

      所有实现存放在OpenCV_Test/demo/Python的image_generic_operations.py文件中,目前实现的仅有:图像旋转(仅限90,180,270度)、图像缩放,后面会逐渐增加,实现代码如下:

import os
import sys
import cv2
from inspect import currentframe, getframeinfo
import argparse

def get_image_list(path, image_suffix):
    image_list = []
    for x in os.listdir(path):
        if x.endswith(image_suffix):
            image_list.append(path+"/"+x)

    return image_list

def get_image_name(image_name):
    pos = image_name.rfind("/")
    image_name = image_name[pos+1:]

    return image_name

def image_rotate_clockwise(image_list, degrees, result_path):
    print("image rotation ...")
    os.makedirs(result_path, exist_ok=True)

    if degrees == 90:
        rotate_code = cv2.ROTATE_90_CLOCKWISE
    elif degrees == 180:
        rotate_code = cv2.ROTATE_180
    elif degrees == 270:
        rotate_code = cv2.ROTATE_90_COUNTERCLOCKWISE
    else:
        raise Exception("Unsupported rotat degrees: {}, it only supports: clockwise 90, 180, 270; Error Line: {}".format(degrees, getframeinfo(currentframe()).lineno))

    for name in image_list:
        print(f"\t{name}")
        image_name = get_image_name(name)
        #print(f"image name:{image_name}"); sys.exit(1)

        mat = cv2.imread(name)
        mat = cv2.rotate(mat, rotateCode=rotate_code)
        cv2.imwrite(result_path+"/"+image_name, mat)

def image_resize(image_list, dst_width, dst_height, result_path):
    print("image resize ...")
    os.makedirs(result_path, exist_ok=True)

    mat = cv2.imread(image_list[0])
    h, w, _ = mat.shape
    if h > dst_width and w > dst_height:
        interpolation = cv2.INTER_AREA
    else:
        interpolation = cv2.INTER_CUBIC

    for name in image_list:
        print(f"\t{name}")
        image_name = get_image_name(name)
        #print(f"image name:{image_name}"); sys.exit(1)

        mat = cv2.imread(name)
        mat = cv2.resize(mat, (dst_width, dst_height), interpolation=interpolation)
        cv2.imwrite(result_path+"/"+image_name, mat)

def parse_args():
    parser = argparse.ArgumentParser(description="image generic operations", add_help=True)

    parser.add_argument("--image_src_path", required=True, type=str, help="the path of the image to be operated, for example: ../../test_images")
    parser.add_argument("--operation", required=True, type=str, choices=["rotate", "resize"], help="specifies the operation to take on the image")
    parser.add_argument("--image_dst_path", required=True, type=str, help="the path where the resulting image is saved, for example: ../../test_images/result")

    parser.add_argument("--degrees", default=90, type=int, choices=[90, 180, 270], help="the degrees by which the image is rotated clockwise")

    parser.add_argument("--width", default=256, type=int, help="the width of the image after scaling")
    parser.add_argument("--height", default=256, type=int, help="the height of the image after scaling")

    parser.add_argument("--image_suffix", default=".png", type=str, help="the suffix of the processed image")
    
    args = parser.parse_args()
    return args

if __name__ == "__main__":
    args = parse_args()

    image_list = get_image_list(args.image_src_path, args.image_suffix)

    if args.operation == "rotate":
        image_rotate_clockwise(image_list, args.degrees, args.image_dst_path)

    if args.operation == "resize":
        image_resize(image_list, args.width, args.height, args.image_dst_path)

    print("test finish")

      使用如下所示:

      GitHubhttps://github.com/fengbingchun/OpenCV_Test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像通用操作Python的实现 的相关文章

  • OpenCV:处理每一帧

    我想使用 OpenCV 编写一个跨平台应用程序进行视频捕获 在所有示例中 我发现来自相机的帧是使用抓取功能进行处理并等待一段时间 我想处理序列中的每一帧 我想定义自己的回调函数 每次当一个新帧准备好处理时都会执行该函数 例如直播对于 Win
  • 将 RGB 转换为黑色或白色

    我如何在Python中获取RGB图像并将其转换为黑白图像 不是灰度 我希望每个像素要么是全黑 0 0 0 要么是全白 255 255 255 流行的 Python 图像处理库中是否有任何内置功能可以完成此任务 如果不是 最好的方法是循环遍历
  • 使用 Azure 机器学习检测图像中的符号

    4年前我发帖这个问题 https stackoverflow com q 6999920 411094不幸的是 得到的一些答案超出了我的技能水平 我刚刚参加了一次构建巡演会议 他们在会上谈论了机器学习 这让我想到了使用 ML 来解决我的问题
  • 检测骰子的上侧

    是否可以检测骰子的上面 虽然从顶部看这将是一项简单的任务 但从许多角度来看 可以看到多个侧面 Here is an example of a dice feel free to take your own pictures 您通常想知道自己
  • 从索贝尔确定图像梯度方向?

    我正在尝试使用 openCV 的 Sobel 方法的结果来确定图像梯度方向 我知道这应该是一个非常简单的任务 我从此处复制了许多资源和答案中的方法 但无论我做什么 所得方向始终在 0 57 度之间 我希望范围为 0 360 我相信所有的深度
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • OpenCV 中“IplImage”和“CvMat”的全称是什么?

    有一个IplImage and CvMat在 OpenCV 中 他们的全名是什么 IPL in IplImage代表英特尔处理库 这是Intel维护OpenCV时的残余 CV in cvMat代表计算机视觉矩阵 这是图形中常用的数据结构 I
  • Pyinstaller“无法执行脚本 pyi_rth_pkgres”并且缺少软件包

    这是我第一次在这里发布问题 因为我的大部分问题已经被其他人回答了 我正在 python 中开发 GUI 应用程序 并尝试使用 pyinstaller 将其打包到单个文件夹和 exe 中 以便于移植 目前 我使用 Windows 10 和 a
  • 有人曾经在 MacOS 10.6 上使用过 OpenCV 和 Python 2.7 吗?

    在过去的 6 个月里 我一直断断续续地尝试让 OpenCV 在 MacOS 上与 Python 配合使用 每次有新版本发布时 我都会再次尝试并失败 我已经尝试过 64 位和 32 位 并且 xcode gcc 和 gcc 都是通过 macp
  • OpenCV,捕获的视频比原始相机视频运行得更快!

    我正在使用 openCV 从相机捕获视频并将其存储到 avi 文件 问题是当我完成捕获并运行 avi 文件时 视频流看起来速度很快 这是代码 void main CvCapture capture cvCaptureFromCAM 0 in
  • ValueError:当数组不是序列时设置带有序列的数组元素

    您好 此代码旨在存储使用 open cv 绘制的矩形的坐标 并将结果编译为单个图像 import numpy as np import cv2 im cv2 imread 1 jpg im3 im copy gray cv2 cvtColo
  • 如何在 opencv 3.0 Beta 中从文件读取 UMat?

    我想用UMat所以我的代码可以使用 OpenCL OpenCV 3 0 0 Beta 在 GPU 和 CPU 上运行 但我找不到将图像文件读入的方法UMat或转换一个Mat to UMat 如何将图像读入UMat 样品用于Mat to UM
  • OpenCV 机器学习算法的 CSV 格式

    OpenCV 中的机器学习算法似乎使用以 CSV 格式读取的数据 参见示例这个 cpp文件 https code ros org trac opencv browser trunk opencv samples c tree engine
  • 警告:发生了非法反射访问操作(java 中的便携式 opencv)

    我想做一个便携的opencv将依赖项添加到 maven 文件的应用程序pom xml 简化的代码是 import org opencv core Mat public class Builder public static void mai
  • opencv如何使用鼠标事件不规则地选择图像区域? c/c++ [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 最近在学习opencv 有没有办法使用鼠标事件选择图像区域 我已经尝试过三角形的了 如果我想选择特定区域而不是三角形怎么办 谢谢你 我对此进
  • Android API人脸检测与OpenCV/JavaCV人脸检测

    我在 Android 设备上使用了本地 Android 人脸检测 但它似乎很慢 而且我不太确定其可靠性 我还使用了 OpenCV 的人脸检测 但仅限于 PC 而不是 Android 设备 对于 Android 我猜我必须使用 JavaCV
  • 将yuv420p原始数据转换为opencv图像

    我有来自 rtmp 服务器的原始数据 像素格式为 yuv420p 我使用管道来读取数据 但我不知道如何将原始数据解码为图像 command ffmpeg command extend loglevel fatal i rtmp localh
  • 从凸点获取角点

    我编写了算法来提取图像中显示的点 它们形成凸形 我知道它们的顺序 如何从这些点中提取角点 顶部 3 个和底部 3 个 我正在使用opencv 如果你已经有了物体的凸包 并且该包包含角点 那么你需要做的就是简化包直到它只有 6 个点 有很多方
  • 使用opencv+picamera流IO用树莓派捕获视频

    我使用 Raspberry 来简单地显示一个视频 目前仅此 为此 我必须使用 opencv cv2 我尝试了很多解决方案 但现在我想使用 Picamera 库捕获视频 我将向您展示我的代码 import io import time imp
  • 如何平滑循环列向量

    这是一个 OpenCV2 问题 我有一个矩阵代表closed空间曲线 cv Mat

随机推荐

  • git 打包两个版本差异

    git archive o update zip 当前版本号 git diff name only 上一版本号
  • QMainWindow和QWidget

    一 QMainWindow QmainWindow主窗口为用户提供一个应用程序框架 它有自己的布局 可以在布局中添加控件 在主窗口中可以添加控件 比如将工具栏 菜单栏 状态栏等添加到布局管理器中 窗口类型介绍 QMainWindow QWi
  • 人工智能技术发展历史

    人工智能 Artificial Intelligence 简称 AI 的历史可以追溯到上世纪50年代 以下是其中的关键点 1956年 达特茅斯会议 1956年 美国达特茅斯学院举办了一次会议 邀请了一些研究者共同探讨人工智能的概念 目标和方
  • 【NLP入门教程】三、词性标注

    词性标注 Part of Speech Tagging POS Tagging 是自然语言处理中的另一个基本任务 它涉及将文本中的每个词元 Token 标注为其对应的词性 如名词 动词 形容词等 词性标注有助于我们理解文本的语法结构 进而支
  • win10 家庭版系统安装docker desktop遇到那些坑

    最近开发中需要用到docker来打包镜像 由于我的电脑系统是win10 家庭版 而docker desktop针对win10系统只支持64 位的 Windows 10 专业版 企业版和教育版 我又不想重装系统 因为要重装一堆工具 太麻烦了
  • FILCO Majestouch Convertible 2 键盘连接电脑说明

    键盘连接新电脑频次比较低 每次都忘记了怎么操作 要去翻说明书 上网找方法 在此记录下圣手2代键盘连接新电脑或者切换电脑的连接方式
  • Python数据可视化matplotlib.pyplot的使用

    1 生成数据 安装matplotlib windows cmd中 pip install matplotlib 在Python环境下 使用import matplotlib检测是否安装成功 不报错就是安装成功 重启写py的工具就可以进行使用
  • 2020东京奥运会奖牌排行--数据可视化

    爬取数据1 1 数据来源 https 2020 cctv com medal list index shtml 数据为下面图片的表格数据 2 具体代码 2 1需要提前下载好的pip install 库名 from selenium impo
  • Windows 下 VSCode 使用 SSH 连接报 Bad owner or permissions on C:\\Users\\Administrator/.ssh/config 错误问题解决

    Windows 下 VSCode 使用 SSH 连接报 Bad owner or permissions on C Users Administrator ssh config 错误问题解决 vscode ssh 链接报错情况 解决方法 v
  • JAVA环境变量配置方法(Windows)

    编写一个JAVA程序后 如果想让自己编写的代码可以正常运行 我们便需要对它进行编译和运行 而Java环境变量的配置就显得尤为重要 本篇文章 我们来谈一谈关于Java环境变量配置的一些方法 目录 方法一 方法二 方法三 方法一 1 右击 我的
  • ARP协议

    什么是ARP 地址解析协议 即ARP Address Resolution Protocol 是根据IP地址获取物理地址的一个TCP IP协议 主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机 并接收返回消息 以此确定
  • vue 字符串、数组之间的相互转换

    1 字符串转数组 str split 以分号拆分字符串 2 数组转字符串 arr join 把数组项拼接成字符串 并以分号隔开 默认情况下是以逗号隔开
  • Linux系统迁移(同一台电脑),重建UEFI启动文件

    电脑型号 hp 暗影精灵5 Air 显卡 RTX 2060 CPU i7 9750H 硬盘 500G固态 1T固态 启动方式 UEFI 操作系统 Ubuntu16 04 之前安装Ubuntu的时候给Ubuntu系统分配的空间太小了 安装新硬
  • 函数调用时的堆栈变化(实例)

    函数调用时的堆栈变化 关于函数调用是的堆栈变化 在网上找到的资料大都是一些配图文字等 理解起来尚有些困难 不过建议大家还是先了解一下基本的原理 下面我主要通过一个调用函数的实例来讲解一下函数调用时的堆栈变化 Ps 图片有点糊 大家最好自己跟
  • 一、时间序列分析---滞后算子(lag operator)

    1 基本概念 时间序列是以观测值发生的时期作为标记的数据集合 一般情况下 我们是从某个特定的时间开始采集数据 直到另一个固定的时间为止 我们可以将获得的数据表示为 y 1 y
  • 【hadoop——HDFS操作常用的Shell命令】

    1 Hadoop分布式文件系统 Hadoop Distributed File System HDFS 是Hadoop核心组件之一 我们已经安装好了Hadoop 2 7 1 其中已经包含了HDFS组件 不需要另外安装 最基本的shell命令
  • 最新阿里云ECS服务器挂载数据盘亲测好用挂载成功分享一下

    最近网站打不开了 发现服务器系统盘不够用了 查看磁盘占用情况 系统盘已经快满了 不能考虑到后期的需求 不能每次都去清理 不得不增加数据盘 这里记录下数据盘的挂载过程 也是找了好多参考方法亲测成功分享出来希望可以帮助有需要朋友 总结方法如下
  • 【无标题】BTY-DNS推广机制及首次空投规则

    BTY DNS 致力于创建Web3领域中的去中心化身份 DID BTY DNS的 yuan域名自开放上线以来 获得广大用户的喜爱与勇跃注册 目前 yuan的域名注册量已近千个 BTY DNS具有推广奖励机制 同时对于持有DNS的用户将进行第
  • 软件人员kpi制定模板_软件项目团队绩效考核设计与薪酬激励设计

    关注 本头条号 更多关于制度 流程 体系 岗位 模板 方案 工具 案例 故事 图书 文案 报告 技能 职场等内容 弗布克15年积累免费与您分享 阅读导航 01 软件项目团队绩效考核设计 02 软件项目团队薪酬激励设计 研发部 软件项目团队绩
  • 图像通用操作Python的实现

    平时经常会对一个目录下的图像做统一处理 如缩放 旋转等等 之前使用C 处理 有时不是很方便 发现使用Python比较简单 代码量又很少 在Anacanda下执行起来也比较方便 因此 打算在后面遇到图像的常规处理时都将其实现放入到同一个py文