CV00-02-CV基本操作1
目录
数字图像属性
opencv-python环境搭建
基本操作I
Read in / Show out,读取、显示图像;
Change color,修改颜色;
Gamma Correction,伽马校正;
Crop,切割;
Histogram,直方图
数字图像属性
数字图像有多个通道(RGB、YUV、HSV等),每个通道是一个二维矩阵,矩阵的每个元素是0-255整数。
opencv-python环境搭建
安装python3.8,采用exe方式安装,pip会随之安装。修改环境变量path,添加C:\Python38和C:\Python38\Scripts。其中C:\Python38有python.exe,C:\Python38\Scripts里面有pip.exe。以管理员身份打开cmd,执行以下三个命令:
pip install --upgrade setuptools
pip install numpy Matplotlib
pip install opencv-python
安装numpy、Matplotlib、opencv-python三个包, opencv环境已经已经搭建好了。
如果安装失败,那么也可以到http://www.lfd.uci.edu/~gohlke/pythonlibs/下载numpy、matplotlib、opencv-python三个包,再本地安装,pip install <包名>。
或者,可以指定国内的开源镜像站,这样不会受到万里长城的干扰。我使用的是网易开源镜像站,推荐。以安装matplotlib为例。
pip install matplotlib -i http://uni.mirrors.163.com/pypi/simple/ --trusted-host uni.mirrors.163.com
基本操作
我们使用opencv-python环境,操作调用API可以参考这个地址的文档,里面有详细的说明。
OpenCV-Python Tutorials
Read in / Show out,读取、显示图像;
搭建好环境,就用读取、显示图像测试一下。使用cv2.imread读取经典的lena图像,可以直接读取彩色、灰度图像,cv2.imshow显示图像。
import cv2# flags = 0 灰度图像
# flags = 1 彩色图像
img_color = cv2.imread('d:/dev/res/lena.jpg', flags=1)
img_gray = cv2.imread('d:/dev/res/lena.jpg', flags=0)
# 显示图片
cv2.imshow('lena_color', img_color)
cv2.imshow('lena_gray', img_gray)
# 等待输入ESC退出
key = cv2.waitKey()
if key == 27:cv2.destroyWindow('lena_color')cv2.destroyWindow('lena_gray')pass
Change color,修改颜色;
加深颜色,我们让每个像素点R通道加100,那么整个图片会变更红。
import cv2def rgb_add(image, channel, offset=0):if abs(offset) <= 255 and channel.casefold() in ('r', 'g', 'b'):if offset > 0:b, g, r = cv2.split(image)if channel.casefold() == 'r':r[r > 255 - offset] = 255r[r <= 255 - offset] = r[r <= 255 - offset] + offsetelif channel.casefold() == 'g':g[g > 255 - offset] = 255g[g <= 255 - offset] = g[g <= 255 - offset] + offsetelif channel.casefold() == 'b':b[b > 255 - offset] = 255b[b <= 255 - offset] = b[b <= 255 - offset] + offsetpassimage_merge = cv2.merge((b, g, r,))return image_mergeelif offset < 0:b, g, r = cv2.split(image)if channel.casefold() == 'r':r[r < abs(offset)] = 0r[r >= abs(offset)] = r[r >= abs(offset)] + offsetelif channel.casefold() == 'g':g[g < abs(offset)] = 0g[g >= abs(offset)] = g[g >= abs(offset)] + offsetelif channel.casefold() == 'b':b[b < abs(offset)] = 0b[b >= abs(offset)] = b[b >= abs(offset)] + offsetpassimage_merge = cv2.merge((b, g, r,))return image_mergeelse:return imageelse:return imagepassimg = cv2.imread('d:/dev/res/lena.jpg', flags=1)
img_r = rgb_add(img, channel='r', offset=-150)cv2.imshow('lena', img)
cv2.imshow('lena_red', img_r)key = cv2.waitKey()
if key == 27:cv2.destroyAllWindows()pass
Gamma Correction,伽马校正;
伽马校正的目的是使得图像变明亮清晰。校正的方式是,对每个像素每个通道的数值进行gamma校正,每个像素除以255,结果做gamma次幂,再乘以255,取整。gamma值再0至1之间使图像整体变得明亮清晰,一般取gamma=0.7可用。
import cv2
import numpydef gamma_adjust(image, gamma=1.0):table = []for i in range(256):table.append(((i / 255.0) ** gamma) * 255)passtable = numpy.array(table).astype('uint8')image_gamma = cv2.LUT(image, table)return image_gammapassimg = cv2.imread('d:/dev/res/dark.jpg', flags=1)
img_gamma = gamma_adjust(img, gamma=0.5)
cv2.imshow('img', img)
cv2.imshow('img_gamma', img_gamma)
key = cv2.waitKey()
if key == 27:cv2.destroyAllWindows()pass
Crop,切割;
从一个图像里面截取某一部分图像。比如从lena里截取面容。
import cv2img = cv2.imread('d:/dev/res/lena.jpg', 1)
img_crop = img[80:200, 80:200]
print(img.shape)
cv2.imshow('lena', img)
cv2.imshow('lena_crop', img_crop)
key = cv2.waitKey()
if key == 27:cv2.destroyAllWindows()pass
Histogram,直方图
通过改变灰度图像各像素点的值,在保证不超过灰阶最大值的前提下,增强各像素点的对比,从而使图像增强,使图像变清晰。
关于直方图的原理,我就(说)不(不)说(明)了(白),个人认为这个cnblogs的博客对直方图原理写的比较好,直方图均衡化原理,推荐给大家。
import cv2
import matplotlib.pyplot as pltimg_gray = cv2.imread('d:/dev/res/lena.jpg', 0)
hist_gray = img_gray.flatten()
# bins 指的是统计区间分成个数
# range指的是统计区间
plt.hist(hist_gray, bins=256, range=[0, 256])
plt.show()img_eq = cv2.equalizeHist(img_gray)
hist_eq = img_eq.flatten()
plt.hist(hist_eq, bins=256, range=[0, 256])
plt.show()cv2.imshow('lena_gray', img_gray)
cv2.imshow('lena_hist', img_eq)key = cv2.waitKey()
if key == 27:cv2.destroyAllWindows()pass
相关文章:

链式表的按序号查找
本题要求实现一个函数,找到并返回链式表的第K个元素。 函数接口定义: ElementType FindKth( List L, int K );其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode {ElementType Data;PtrToLNode Next; }; typedef PtrToL…

Codeforces Round #409 (Div. 2) C Voltage Keepsake(二分)
题意:有n(n<100000)个机器。。。第i个机器最开始有bi(1<bi < 100000)个单位的电量,机器可以储存的电量没有上限,启动后每秒消耗ai(1<ai<100000)个单位的电量,有一个充电器每秒可以充p(1<p<1e9)的电量。求保持所有机器电…

电子计算机的发展与应用教案,川教版信息技术七上第3课《电子计算机的发展与应用》教案1.doc...
川教版信息技术七上第3课《电子计算机的发展与应用》教案1整理双流县中学现代课堂教学分课时教学设计课题第3课 计算机的发展与应用课时1课型新课教学目标知识与能力:了解计算机的产生和发展,了解我国计算机的发展状况,计算机的特点与具体应用…

ios架构篇-2 国际化多语言
关键字:ios,国际化,多语言 实现功能: 1.默认采用系统语言 2.语言切换后实时生效 3.支持中英文,包含页面、app名称、系统默认权限弹框(如相机相册权限) 思路:app首次初始设置为系统语言,用户在app内切换语言时发送语言切换通知,刷新所有页面 1.project增加需要支持的…

Python基础15-函数闭包与装饰器
目录 装饰器概念 装饰器的实现 修改被装饰函数的代码(非装饰器实现) 修改被装饰函数的调用方式(非装饰器实现) 装饰器的实现(不完整的实现level1) 装饰器实现的语法糖(不完整的实现level2…

python 全栈开发,Day132(玩具管理页面,控制玩具通讯录,基于请求的好友关系建立)...
先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.5.zip 注意:由于涉及到版权问题,此附件没有图片和音乐。请参考链接,手动采集一下ÿ…

iOS技术篇1-CocoaPods
iOS技术篇1-CocoaPods 上一篇: 目录 下一篇:ios技术篇2-CoreData

计算机艺术未来发展趋势,计算机技术对现代艺术设计的影响
摘 要 在当今,计算机技术已经覆盖到了全球生活的各个领域,毫不夸张地说,计算机技术已经成为世界上最重要的技术之一。计算机技术对于某些行业和领域的冲击是巨大的,甚至是革命性的改变,它能够使很多的活动变得更为便捷…

【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块
题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接。 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么它们就会被认为是一对友好城市。 By…

Python基础16-模块与包基础01
目录 初识模块和包 Python常用的内置模块 关键字import和from import、from查找的路径 如何调用 __name__与模块执行 __name__的用法(单元测试) 初识模块和包 我们把功能相近或相关的py文件组成模块,这样分开写代码便于维护,…

配置用户通过Telnet登录设备的身份认证(AAA本地认证)
背景信息 用户通过Telnet登录设备时,设备上必须配置验证方式,否则用户无法成功登录设备。设备支持不认证、密码认证和AAA认证三种用户界面的验证方式,其中AAA认证方式安全性最高。 采用AAA本地认证方式实现用户通过Telnet登录设备的身份认证&…
【自考】信息系统开发与管理(二)——章节详读
自考的第二阶段结束了,这一阶段是对书的详读过程。每章节读完,画一个导图。将其总结成一张网。织网的过程就是思考的过程。织网不断进行中……!宏观方面:1~3章第一章 管理信息系统导论在研究一…

ios技术篇-CoreData
ios技术篇-CoreData 上一篇: iOS技术篇-CocoaPods 目录 下一篇:

中山大学计算机学院运动会,喜讯!我院获2019中大校运会教工组团体第二名
11月2日,中山大学2019年运动会在南校园举行,来自全校68个院系、附属医院、部门共3200余名师生参加比赛。由37名职工运动员组成的中山七院代表队参加教工组田径赛、趣味田径及球类等全部15项比赛,经过激烈角逐,最终以团体总分173分…

Python基础17-模块与包基础02、常用模块之time、random
目录 名字冲突与避免 设置BASE_DIR保证程序能找到模块位置 time random 名字冲突与避免 在test.py里写下面一段代码,用正则表达式包re进行匹配,匹配出123开头的字符。如果我们在test.py同级写一个re.py,那么Python解释器在进行导入时就会…

Hadoop学习笔记(1) ——菜鸟入门
Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: 【百度百科】一个分布式系统基础架构,由Apache基金会所开发。用户能够在不了解分布式底层细节的情况下。开发分布式程序。充分利用集群的威力进行快…

HTTP协议简介
HTTP协议HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆伯纳斯-李于1989年在…

计算机组成原理读写周期波形图,第3章存储器层次结构-1讲述.ppt
第3章存储器层次结构-1讲述计算机组成原理 * 计算机组成原理 ——存储器层次结构(1) 2016-3-18 几个基本概念 1、存储器:计算机系统中的记忆设备,用来存放程序和数据。 2、存储元:存储器的最小组成单位,用以存储1位二进制代码。 3…

iOS架构篇-4 架构模式MVVM
iOS架构篇-4 架构模式MVVM MVVM原理MVVM 登录例子View:ViewModel:Model:如果觉得可以就点个👍吧,欢迎粉丝收藏,土豪打赏,您的关注就是我们创作的动力!读者有什么想看的相关技术篇章,欢迎评论留言!QQ交流群:908058499MVVM原理 #mermaid-svg-s6n4t9QkR9OeNy45 .label{fon…

CV00-01-开篇与环境搭建
目录 Intro 环境搭建 TensorFlow搭建 PyTorch搭建 PaddlePaddle搭建 Intro 从今天起学习CV,为期6个月,以三个真实项目为背景学习CV。 目前是第一个项目——车道线检测。时间两个月(共8周),每周五、周日晚上在线…

Spring MVC环境中的文件上传功能实现
在实际开发过程中,尤其是web项目开发,文件上传和下载的需求的功能非常场景,比如说用户头像、商品图片、邮件附件等等。其实文件上传下载的本质都是通过流的形式进行读写操作,而在开发中不同的框架都会对文件上传和下载有或多或少的…

iOS架构篇-5 CI/CD(持续集成、持续交付、持续部署)
iOS架构篇-5 CI/CD(持续集成、持续交付、持续部署) CI CI是指持续集成,代码的更新会定期自动构建、测试并合并到公共仓库中,方便多分支时解决冲突问题 CD CD是指持续交付和/或持续部署,开发人员改动代码会自动测试提交到仓库,运维实施人员将其部署到生产环境中,方便部…

计算机函数模式的用处是啥,请问怎么理解计算机中的函数?
你的理解有点外行看热闹的意思,呵呵。代码本身就是抽象的,所以“计算机中的函数是一种对代码进行抽象的方式”不能说不对,但是也和没说一样。至于“我们使用抽象出来的函数,而不用关心函数里面的代码是如何组织的”,只…

CV00-03-CV基本操作2
基本操作2 Similarity Transform相似变换 Similarity Transform相似变换:图像形状大小不变,位置发生变化。比如:做平移、旋转。相似变换具有保角性、保比例性,经过相似变换以后原有的角度和比例保持不变。确定一个相似变换矩阵需…

[LeetCode] [C++] 第一轮刷题总结(持续更新~~~)
LeetCode 解题报告 LC_1_解题报告LC_2_解题报告LC_3_解题报告LC_4_解题报告LC_5_解题报告LC_6_解题报告LC_7_解题报告LC_206_解题报告LC_237_解题报告LC_344_解题报告 LeetCode 1. Two Sum 解题思路:两次循环遍历数组,找到两个元素和等于target 注意点&…

Android Studio 在项目中引用第三方jar包
在Android Studio项目中引用第三方jar包的方法: 步骤: 1、在build.gradle文件中添加如下代码: 备注:要添加在Android作用域下 sourceSets {main {jniLibs.srcDirs [libs]}} 点击【Sync Now】,会生成jniLibs文件夹 找到…

android专栏目录
android专栏目录 Android基础篇 android专题-数据库room android专题-蓝牙扫描、连接、读写 Android专题-常用第三方框架 Android高级篇 Android架构篇-1 项目组织架构 Android架构篇-2 国际化多语言 Android架构篇-3 网络接口封装 Android架构篇-4 架构模式MVVM Android架…

东北大学计算机分数线2017,东北大学2017年本科一批录取分数线(全国)
东北大学2017年全国各省各批次集中录取时间为7月6日-27日,在各省录取结束的分批次分科类录取最低分将在本页面持续更新公布,考生录取结果可通过关注东北大学招生办官方微信公众号(neuzs-1923)录取专区查询,最终录取结果请以考生收到的录取通知…

CV00-04-卷积
卷积概念 由于不好进行文字描述(懒),我直接推荐一个博客图像卷积,讲解图像卷积的概念。 图像卷积操作(convolution),或称为核操作(kernel),是进行图像处理的…

unity项目build成webgl时选择生成目录(解决方法)
在unity里点击File>>Build Settings...>>勾选你要生成的Scenes>>选择webgl>>后面Development Build不要勾选:点击build后会让你选择生成的目录,此处要慎重选择,否则会报错! 不要选择到项目所在目录&#…