python小记(2)

2023-11-06

一、安装&问题

Pycharm中File->setting->Python Interpreter添加opencv-python及opencv-contrib-python,调用时直接import cv2即可。
我原来用的Pycharm版本是2018年的,点了更新之后注销快捷键Ctrl+/用不了了,解决方法是:File->Setting->Keymap,更改这个为自己的系统,比如我以前用的是Windows。
在这里插入图片描述

二、题目&代码

题目:使用opencv进行图像处理
描述:自行下载一张网络图片以.jpg格式保存(要求宽高均大于448);自行安装opencv(cv2)以及opencv-contrib;使用opencv读取.jpg格式的文件,并获取图片的宽、高信息;将img1进行镜像,且进行灰度处理得到img2,镜像轴为y轴;Img2进行中心裁剪,裁剪得到448*448的新图片img3;将img1与img2、img3打印出来,并将img2和img3保存到本地文件中。输入:本地读取图像img1;输出:打印img1、img2、img3将img2、img3保存在本地文件中。

import cv2
import numpy as np
def Image():
    # flags False显示灰度图像,True显示原图
    img1 = cv2.imread("C:\\Users\\*\\Pictures\\img1.jpg")  # 镜玄yyds啊啊啊啊啊!
    cv2.imshow(winname='img1',mat=img1)
    cv2.waitKey(2000)
    # cv2.namedWindow('img1',cv2.WINDOW_NORMAL)
    # 获取图片信息,输出高宽通道数
    height = img1.shape[0]
    width = img1.shape[1]
    print('该图像宽为:',width)
    print('该图像高为:',height)
    # 将img1进行水平镜像翻转(对称轴为y轴)
    # 图像的镜像翻转得到的图像与原图像构成的图像是一个轴对称图像
    img2 = cv2.flip(img1,1)  # 0 垂直镜像翻转,1 水平镜像翻转,-1 对角镜像反转
    # 灰度处理img2 令R=G=B
    img2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
    cv2.imshow(winname='img2',mat=img2)
    cv2.waitKey(2000)
    img3 = img2[int(height/2-224):int(height/2+224), int(width/2-224):int(width/2+224)]   # 裁剪坐标为[y0:y1, x0:x1]
    cv2.imshow('img3',img3)
    cv2.imshow(winname='img3',mat=img3)
    cv2.waitKey(2000)
    # 打印图像矩阵
    print(img1,img2,img3)
    # # 多图同窗显示,要求图像通道大小必须相同
    # imgs = np.hstack((img1,img2,img3))
    imgs = ManyImgs(0.2,([img1,img2,img3])) # 结果伸缩变形,需要调整
    cv2.imshow('imgs',imgs)
    cv2.waitKey(1000)
    # 等待关闭
    # cv2.destroyWindow()
    # 调用函数
    cv2.imwrite('C:\\Users\\*\\Pictures\\img2.jpg',img2)
    cv2.imwrite('C:\\Users\\*\\Pictures\\img3.jpg',img3)

# 参考博文:《Opencv实现多幅图像显示在同一窗口(基于Python)》
# 链接:https://blog.csdn.net/qq_44703724/article/details/105613611?

# 定义函数,第一个参数是缩放比例,第二个参数是需要显示的图片组成的元组或者列表
def ManyImgs(scale, imgarray):
    rows = len(imgarray)         # 元组或者列表的长度
    cols = len(imgarray[0])      # 如果imgarray是列表,返回列表里第一幅图像的通道数,如果是元组,返回元组里包含的第一个列表的长度
    # print("rows=", rows, "cols=", cols)
    # 判断imgarray[0]的类型是否是list
    # 是list,表明imgarray是一个元组,需要垂直显示
    rowsAvailable = isinstance(imgarray[0], list)

    # 第一张图片的宽高
    width = imgarray[0][0].shape[1]
    height = imgarray[0][0].shape[0]
    # print("width=", width, "height=", height)

    # 如果传入的是一个元组
    if rowsAvailable:
        for x in range(0, rows):
            for y in range(0, cols):
                # 遍历元组,如果是第一幅图像,不做变换
                if imgarray[x][y].shape[:2] == imgarray[0][0].shape[:2]:
                    imgarray[x][y] = cv2.resize(imgarray[x][y], (0, 0), None, scale, scale)
                # 将其他矩阵变换为与第一幅图像相同大小,缩放比例为scale
                else:
                    imgarray[x][y] = cv2.resize(imgarray[x][y], (imgarray[0][0].shape[1], imgarray[0][0].shape[0]), None, scale, scale)
                # # 如果图像是灰度图,将其转换成彩色显示
                # if  len(imgarray[x][y].shape) == 2:
                #     imgarray[x][y] = cv2.cvtColor(imgarray[x][y], cv2.COLOR_GRAY2BGR)

        # 创建一个空白画布,与第一张图片大小相同
        imgBlank = np.zeros((height, width, 3), np.uint8)
        hor = [imgBlank] * rows   # 与第一张图片大小相同,与元组包含列表数相同的水平空白图像
        for x in range(0, rows):
            # 将元组里第x个列表水平排列
            hor[x] = np.hstack(imgarray[x])
        ver = np.vstack(hor)   # 将不同列表垂直拼接
    # 如果传入的是一个列表
    else:
        # 变换操作,与前面相同
        for x in range(0, rows):
            if imgarray[x].shape[:2] == imgarray[0].shape[:2]:
                imgarray[x] = cv2.resize(imgarray[x], (0, 0), None, scale, scale)
            else:
                imgarray[x] = cv2.resize(imgarray[x], (imgarray[0].shape[1], imgarray[0].shape[0]), None, scale, scale)
            if len(imgarray[x].shape) == 2:
                imgarray[x] = cv2.cvtColor(imgarray[x], cv2.COLOR_GRAY2BGR)
        # 将列表水平排列
        hor = np.hstack(imgarray)
        ver = hor
    return ver
    
if __name__=='__main__':
	Image()

三、结果

镜玄yyds!!!眷思量我等着你更新!!!

在这里插入图片描述
img1.jpg
在这里插入图片描述
宽高及打印
在这里插入图片描述

img2.jpg
在这里插入图片描述
img3.jpg
在这里插入图片描述

利用ManyImgs()函数得到的图像有伸缩变形,需要修正。
在这里插入图片描述

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

python小记(2) 的相关文章

随机推荐

  • 密码算法学习

    密码学算法分三大类 1 对称算法 使用同一个密钥 常见的对称加密算法 DES 3DES DESX Blowfish IDEA RC4 RC5 RC6和AES 优点 加解密的高速性和当使用长密钥时的难解性 缺点 当需要密钥的数量多时 密钥的生
  • Python-数据类型转换

    当涉及数据类型转换时 Python提供了多种内置函数来执行不同类型之间的转换 以下是每个方法的详细说明和示例案例 整数和浮点数转换 int x base 10 将给定的参数x转换为整数 x可以是一个整数 浮点数或字符串 如果x是字符串 则可
  • 获取网页标签图标favicon

    想要获取网页标签图标 首先要了解favicon有哪几种 1 像这种favicon ico图标可以直接用 window location protocol window location host favicon ico 获取 2 像这种图标
  • 郭律: 论机器学习平台与人工智能的关系

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯云AI中心发表于云 社区专栏 郭律 腾讯高级产品经理 腾讯云AI基础产品中心高级产品经理 解决方案架构师 主导腾讯智能钛TI ONE 可视化机器学习平台 和TI S 自动机
  • 【华为OD机试】乘坐保密电梯(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • Flowable工作流引擎的使用3(task审批节点的接受与使用)

    BPMN task节点 节点介绍 task节点是和业务最贴切的节点 表示一次审批 除了id name inComingFlows outGoingFlows这些属性以外 还有一些权限信息 用于区分一个任务哪些人可以审核的 flowable自
  • shiro反序列化漏洞的原理和复现

    一 shiro简介 Shiro是一个强大的简单易用的Java安全框架 主要用来更便捷的认证 授权 加密 会话管理 Shiro首要的和最重要的目标就是容易使用并且容易理解 二 shiro的身份认证工作流程 通过前端传入的值 获取remembe
  • 【电气专业知识问答】问:什么是安全自动装置?它在电力系统上的作用、配置指导策略及要求是什么?

    电气专业知识问答 问 什么是安全自动装置 它在电力系统上的作用 配置指导策略及要求是什么 答 1 定义 电力系统安全自动装置是指在电力网中发生故障或异常运行时起控制作用的自动装置 安全自动装置可以防止系统稳定破坏或事故扩大 避免造成大面积停
  • euler欧拉系统尝试用yum、源码安装pacemaker失败

    euler欧拉系统尝试用yum 源码安装pacemaker失败 用yum安装pacemaker root euler uname rp 3 10 0 862 14 1 0 h209 eulerosv2r7 x86 64 x86 64 不能自
  • pip install下载报网络错误、pip报错,以及module ‘serial‘ has no attribute ‘Serial‘报错

    pip install下载报网络错误 下载pip install serial时报错如图 这是由于下载的pip官网是国外网站 下载速度会比较慢 解决办法 从国内镜像去下载 pip install serial i https pypi tu
  • 如何重载前置++和后置++

    前置 即 运算符位于操作数的前面 例如 i 后置 即 运算符位于操作数后面 例如 i 注意一下几点 1 前置 重载时没有参数 而后置 重载时有参数 不会使用其参数 仅仅是区分用 可以理解为前置 后面有参数了 所以不需要参数 2 前置 需要返
  • XP能访问samba,WIN7不能访问解决方案

    win7无法访问Samba 转自 http hi baidu com t byz item b2ee893e52ca885981f1a79e 默认情况下 Windows 7无法正常访问NAS或者Samba服务器上的共享文件夹 原因在于从Vi
  • JavaWeb练习题

    JavaWeb练习题 JavaWeb试题解析链接 https blog csdn net Lvruoyu article details 124440007 关注拂晓DayBreak公众号 回复javaweb练习题 便捷观看 题干 选项A
  • stm32三相逆变程序,pcb,以及板子。stm32输出三相spwm波驱动6个mos管实现三相逆变

    逆变器本身可稳压 可任意设定输出电压 pid参数可用电脑通过串口调节 输入12 40 v 自动生成辅助电源供电 资料齐全 程序注释详细 稳定可靠 适合新手学习以及项目应用 stm32三相逆变开环驱动程序 stm32三相逆变闭环程序 modb
  • Git学习之将不空的文件夹关联到远程仓库

    昨天和今天在将 本地不空的文件夹关联到远程Git仓库 的时候遇到了很多瓶颈 主要方法一般都是在本地创建一个空的文件夹 然后 仓库化 再关联到远程仓库 或者是将远程仓库直接克隆到本地 下面说说将不空的文件夹关联到远程仓库的方法 因为我试了好多
  • 学习UI设计有哪些figma插件

    自2016年推出以来 Figma已发展成为市场领先者UI设计工具之一 因为它不仅简单易用 功能优秀 而且基于云服务 可以实时编辑 节省大量手动下载或复制文件的时间 不仅如此 Figma还提供合作功能 让您和您的团队同时处理文件 避免许多潜在
  • 反诈题库---合计100道(解析版最新)

    反诈题库一合计100 一 判断题 40题 1 小A在淘宝购物 商家发了一条非淘宝的商品链接让其拍下 小A直接点击链接付款 X 解析 淘宝购物坚持按担保交易流程下单 如果卖家要求通过陌生链接或二维码要求付款 100 是骗子 请到安全中心举报
  • postgresql客户端连接错误的解决方法

    今天在重新设置postgresql服务器以后却发现启动不了服务器 错误如下 psql
  • 为什么机油使用后变红_上汽大众为什么开始使用低粘度机油

    2020年注定是一个不平凡的年份 年初的新冠疫情打乱了所有中国人的生活 现在疫情已经一步一步的趋向平缓 所有人的生活也正在回归正常 复工后收到上汽大众总部发来的通知 要求所有新款EA211和EA888国六发动机必须使用符合大众VW50800
  • python小记(2)

    目录 一 安装 问题 二 题目 代码 三 结果 一 安装 问题 Pycharm中File gt setting gt Python Interpreter添加opencv python及opencv contrib python 调用时直接