OpenCV StudyNote

news2024/11/26 3:52:00

Open CV学习

图像读取与显示

灰度图像 - 单通道

彩色图像 - 三通道 (B, G, R)

一般步骤

import cv2 as cv   					# 导入OpenCV支持(cv2是包的名称不是版本号)
import numpy as np					# 所有图像数据都是以 numpy 数组方式存储
imread(filename[,flags])			# imread 函数,读取图像
# filename 表示文件路径, []内可以不填
imshow(winname, mat)				# imshow 函数,显示图像
# winname 表示窗口标题, mat 表示图像对象
# 加载通道顺序



显示与等待时间

cv.wajitKey(0)

表示一直等待,直到任意一个键盘操作

cv.waitKey(1000)

表示等待1000ms即1s

如果不加, 图片会一闪而过

实例

import cv2 as cv
import numpy as np

def show_image():
    image = cv.imread("E:/data/lena.jpg")
    cv.imshow("input", image)
    cv.waitKey(0)
    cv.destroyAllWindows()

show_image()

在这里插入图片描述

图像色彩空间转换

常用色彩空间:

在这里插入图片描述

  • ​ HSV
    • 取值范围H:0 ~ 180,SV:0~255
  • ​ RGB
    • 计算机显示器的标准支持色彩系统
    • 色彩空间设备独立
    • 取值范围0~255
  • ​ YCrCb
    • •Y分量表示信息,CrCb可以被压缩

图像色彩转换

  • 从一个色彩空间转换到另外一个色彩空间

  • 信息传递与损失

  • 过程可逆与不可逆

函数与参数

cv.cvtColor(src,code[,dst[,dstCn]])->dst
# src表示输入图像, 类型CV_8U(np.uint8字节类型)、CV_32F(np.float32浮点数类型)

code表示:

cv::COLOR_BGR2RGB = 4      # 通道交换

cv::COLOR_BGR2GRAY = 6	   # 彩色到灰度

cv::COLOR_GRAY2BGR = 8	   # 灰度到彩色(信息损失不可逆)

cv::COLOR_BGR2HSV = 40     # 可以双线转换

示例:

import cv2 as cv
import numpy as np


def color_space_demo():
    image = cv.imread("lena.jpg")
    cv.imshow("lena", image)
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
    ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)
    cv.imshow("hsv", hsv)
    cv.imshow("ycrcb", ycrcb)
    cv.waitKey(0)
    cv.destroyAllWindows()

color_space_demo()

在这里插入图片描述

图像对象的创建与赋值

图像对象属性

  • 图像宽高 image.shape
  • 图像深度 image
  • 图像数据类型 image.dtype
  • 图像通道 image.shape
  • 数据类型
    • np.uint8
    • np.float32
    • np.int32
    • np.int64

Numpy 数据包函数

opencv-python中一切图像数据皆numpy array

*• numpy.array(object, dtype=None, , copy=True, order=‘K’, subok=False, ndmin=0, like=None)

  • object 数组

  • dtype 数据类型

*•numpy.zeros(shape, dtype=float, order=‘C’, , like=None)

  • 数组维度

  • dtype 数据类型

*•numpy.asarray(a, dtype=None, order=None, , like=None)

  • 数组对象

  • dtype 数据类型

•numpy.reshape(a, newshape, order=‘C’)

  • 数组维度

  • dtype 数据类型

import numpy as np
np.array([[1, 2],[3, 4]], dtype=np.uint8)

创建图像

•np.zeros ->创建一个黑色背景图像

•np.zeros_like->创建一个与输入图像大小一致的黑色背景图像

•np.ones创建一个全部像素值是1的图像

图像赋值

•图像赋值就是给numpy array数组赋值

•m = np.zeros((3, 3, 3), dtype=uint8)

•m[:] = 255

•创建数组m,然后赋值为255(白色)

•m[:] = (255,0,0)

•创建数组m,然后赋值为(255,0,0)蓝色

代码演示

def numpy_demo():
    m1 = np.array([[2,3], [4, 5]], dtype=np.uint8)
    print(m1)
    m2 = np.ones((4,4,3), dtype=np.uint8)
    print(m2)
    m2[:] = (255, 0, 0)
    print(m2)
    m3 = np.zeros((4,4,3),dtype=np.uint8)
    print(m3)
    m3[:]=255
    print(m3)
numpy_demo()

C:\use\anaconda\envs\openvino\python.exe C:/use/E/桌面/cv/opencv/test.py
[[2 3]
[4 5]]
[[[1 1 1]
[1 1 1]
[1 1 1]
[1 1 1]]

[[1 1 1]
[1 1 1]
[1 1 1]
[1 1 1]]

[[1 1 1]
[1 1 1]
[1 1 1]
[1 1 1]]

[[1 1 1]
[1 1 1]
[1 1 1]
[1 1 1]]]
[[[255 0 0]
[255 0 0]
[255 0 0]
[255 0 0]]

[[255 0 0]
[255 0 0]
[255 0 0]
[255 0 0]]

[[255 0 0]
[255 0 0]
[255 0 0]
[255 0 0]]

[[255 0 0]
[255 0 0]
[255 0 0]
[255 0 0]]]
[[[0 0 0]
[0 0 0]
[0 0 0]
[0 0 0]]

[[0 0 0]
[0 0 0]
[0 0 0]
[0 0 0]]

[[0 0 0]
[0 0 0]
[0 0 0]
[0 0 0]]

[[0 0 0]
[0 0 0]
[0 0 0]
[0 0 0]]]
[[[255 255 255]
[255 255 255]
[255 255 255]
[255 255 255]]

[[255 255 255]
[255 255 255]
[255 255 255]
[255 255 255]]

[[255 255 255]
[255 255 255]
[255 255 255]
[255 255 255]]

[[255 255 255]
[255 255 255]
[255 255 255]
[255 255 255]]]

进程已结束,退出代码0

def numpy_demo():
    black = np.zeros((512, 512, 3), dtype=np.uint8)
    black[:,0:255] = 255

    h,w,c = black.shape
    print(h,w,c)
    cv.imshow("black", black)
    cv.waitKey(0)
    cv.destroyAllWindows()

numpy_demo()

在这里插入图片描述

图像像素的读写操作

像素访问与遍历

  • 像素遍历本质就是numpy数组访问

  • 假设变量image

  • 获取图像维度信息: image.shape

  • 图像访问像素: image[row, col]

  • 图像赋值像素: image[row, col] = (b,g,r)

像素读写

  • b, g, r = image[row, col]

  • image[row, col] = (255-b, 255-g, 255-r)

  • 读写像素,灰度图像:

  • pv = image[row, col]

  • image[row, col] = 255-pv

示例

def visit_pixel_demo():
    image = cv.imread("lena.jpg")
    cv.imshow("lina", image)
    h, w, c = image.shape
    for row in range(h):
        for col in range(w):
            b, g, r = image[row, col]
            # 反色
            image[row, col] = (255 - b, 255 - g, 255 - r)
    cv.imshow("visited", image)
    cv.waitKey(0)
    cv.destroyAllWindows()
visit_pixel_demo()

在这里插入图片描述

像素算数操作

算数操作

支持函数

  • cv.add(src1, src2[, dst[, mask[, dtype]]]) ->dst

  • cv.subtract(src1,src2[,dst[,mask[,dtype]]])->dst

  • cv.multiply(src1,src2[,dst[,scale[,dtype]]])->dst

  • cv.divide(src1, src2[, dst[, scale[, dtype]]])->dst

src1 & src2表示图像

加法,保证不越界:saturate(src1 + src2)-》0~255

超过255取255,小于0取0

  • mask参数
    • mask区域相加减,其他区域为零

实例

def arithmetic_demo():
    image1 = cv.imread("lena.jpg")
    h, w, c = image1.shape
    image2 = np.zeros_like(image1)
    image2[:,:] = (110, 0, 250)
    mask = np.zeros((h, w), dtype=np.uint8)
    mask[100:200,100:200] = 1;
    cv.imshow("img1", image1)
    cv.imshow("img2", image2)
    added = cv.add(image1, image2, mask = mask)
    cv.imshow("added", added)
    cv.waitKey(0)
    cv.destroyAllWindows()

arithmetic_demo()

在这里插入图片描述

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

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

相关文章

自助服务:怎么提高客服人员效率?

越来越多的企业意识到了客服效率的重要性,大家通过布局全渠道系统、智能客服机器人、人员岗前培训等方式来提升客服效率,为客户提供更迅速、专业、优质的服务。人员效率的提升不仅能提高客户体验,还有助于企业的长期发展,带来更多…

【Vue2+Element ui通用后台】头部

文章目录headerheader 在 components 中新建 CommonHeader.vue 组件来完成头部组件的编写 <template><div class"header-container"><div class"l-content"><el-button icon"el-icon-menu" size"mini"><…

【MySQL】索引基础介绍

一、常见的存储引擎有哪些&#xff1f;区别是什么&#xff1f; Mysql 默认的存储引擎是&#xff1a;InnoDB&#xff0c;具有支持事务、行级锁、高并发访问性能。MyIsAM&#xff1a;访问速度快&#xff0c;实际运用如果是以读和插入操作为主&#xff0c;并对事物完整性和并发性…

面向对象程序设计期末项目总结

面向对象程序设计期末项目总结 开发前准备 MysqlNavicatTomCatIDEA 一&#xff0c;配置项目环境 右键项目名&#xff0c;添加新模块 命名后右键新建的模块 选中Web模块 到此项目创建完毕&#xff0c;接下来是配置环境。 打开IDEA–>File找到Project Structure 添加所…

Pikachu(皮卡丘)靶场中SQL注入

Pikachu靶场中SQL注入1.Pikachu(皮卡丘)靶场中SQL注入1.1.数字型注入1.2.字符型注入1.3.搜索型注入1.4.xx型注入1.5.insert/update注入1.6.delete注入1.7.http头注入1.8.盲注(base on boolian)1.9.盲注(base on time)1.10.宽字节注入1.Pikachu(皮卡丘)靶场中SQL注入 若遇到不链…

基于java+springboot+mybatis+vue+mysql的冬奥会科普平台

项目介绍 基于SpringBoot框架的冬奥会科普平台利用网络沟通、计算机信息存储管理&#xff0c;有着与传统的方式所无法替代的优点&#xff0c;系统采用java语言开发&#xff0c;前端采用vue技术&#xff0c;数据库采用mysql进行数据存储。比如计算检索速度特别快、可靠性特别高…

大数据如何在制造业中进行应用?数据宝董事长汤寒林现身数字化年会讲了这个事

12月8日1670923102263472480日&#xff0c;2022中国数字化年会成功在线上举办&#xff01;本届年会以“向变而生”为主题&#xff0c;历时三天&#xff0c;特别打造了主论坛、高峰论坛与行业数智化论坛三大板块&#xff0c;60余位专家学者与来自各领域各行业数字化领军人物 通过…

前端基础(五)_CSS文本文字属性

CSS文本文字属性 1、文字属性 1.1、字号 font-size&#xff1a;38px; 浏览器默认16px; 1.2、字体 font-family: 如果字体名称包含空格&#xff0c;字体名称上加引号&#xff1b; 中文字体名称加引号&#xff1b; 多个字体名称作为一个回退系统来保存&#xff0c;如果第一个不…

什么才是写博客初心如何坚持

为何写机器人课程博客并一直坚持&#xff1f;&#xff08;2021&#xff09; 创新源自真心&#xff0c;“乱”创新的课程徒有其表&#xff0c;“不”创新的课程逐渐凋零。 个人觉得&#xff0c;课程教学创新宏观上的目标是让学生更好的认识自己并适应社会发展和变化&#xff1b…

停车场管理系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 主要用jsp,数据库用MySQL 分为前台用户和后台管理员 前台用户 主界面是一个区域内的两到三个停车场&#xff0c;然后 可…

virtualenv系列 (2) · 系统环境与虚拟环境

文章目录1. 怎样算是一套Python环境&#xff1f;2. 系统环境 VS 虚拟环境3. 虚拟环境最佳实践1. 怎样算是一套Python环境&#xff1f; 首先&#xff0c;我们得先弄清楚&#xff1a;怎样算是一个Python环境&#xff1f;然后再去区分系统环境和虚拟环境。简单地说&#xff0c;在…

[附源码]Python计算机毕业设计SSM基于web的家教管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

阿里5位高级架构师耗时两年共同研发《Redis入门手册》

在我们日常的开发中&#xff0c;无不都是使用数据库来进行数据的存储&#xff0c;由于一般的系统任务中通常不会存在高并发的情况&#xff0c;所以这样看起来并没有什么问题&#xff0c;可是一旦涉及大数据量的需求&#xff0c;比如一些商品抢购的情景&#xff0c;或者是主页访…

喜报!Coremail两大方案入选“2022年软件行业典型应用案例”

12月5日&#xff0c;由中国软件行业协会联合中软国际有限公司、江苏省软件行业协会主办的2022中国程序员节在江苏南京圆满落幕&#xff0c;本次活动聚焦当前我国对数字技术创新及应用发展的现实需求&#xff0c;以开源创新、软件根技术、平台工具等热点议题&#xff0c;探讨影响…

Spring Boot 配置文件 · properties 基本语法 · yml 基本语法 · yml 配置不同数据以及 null · yml 配置文件读取

一、配置文件作用二、配置文件的格式三、properties 配置文件说明3.1 properties 基本语法3.2 读取配置文件3.3 properties 缺点分析四、yml 配置文件说明4.1 yml 基本语法4.2 yml 与 properties 格式对比4.3 yml 配置不同数据类型以及 null4.4 yml 配置读取4.4.1 读取配置文件…

Win11十二月系统更新了什么内容?

微软今天发布了12月最新的累积更新补丁&#xff0c;根据Microsoft 支持页面&#xff0c;build 22621.963 现在会在用户 OneDrive 上的存储空间不足时在“设置”应用程序中警告用户&#xff0c;将 Windows Spotlight 与主题设置相结合&#xff0c;修复任务管理器应用程序的界面问…

SSM垃圾分类网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 1,系统&#xff1a;Vindows10 2.软件&#xff1a;IDEA.SQLyog 3.数据库环境&#xff1a;ySQL 4.开源框架&#xff1a;sp…

毕业设计-基于SpringBoot幼儿园管理系统

环境&#xff1a;开发工具&#xff1a;idea&#xff0c;数据库&#xff1a;MySQL5.7 jdk1.8 架构&#xff1a;SpringBoot&#xff0c;前端HTML 主要功能 管理员&#xff1a; 用户管理&#xff08;编辑用户、删除用户、添加用户、查询指定用户&#xff09; 角色管理&#xff08;…

软件测试进阶——测试划分

文章目录按照测试对象划分界面测试可靠性测试容错性测试文档测试兼容性测试易用性测试安装和卸载测试安全测试性能测试按照是否查看代码黑盒测试白盒测试灰盒测试按照开发阶段划分单元测试集成测试系统测试回归测试冒烟测试验收测试按照实施组织划分α测试β测试按照是否运行划…

数据可视化常用工具推荐

数据可视化是将数据分析的结果以图形、表格等形式展示出来&#xff0c;这样能我们更加清晰、明了的理解分析结果、判断数据走势等&#xff0c;让没有进行过数据分析的人也能清楚的了解数据中所含有的规律、趋势等。下面小编将向大家介绍几种常用的数据可视化工具&#xff0c;分…