OpenCV学习笔记(3)——图像的基本操作
- 获取图像的像素值并修改
- 获取图像的属性(信息)
- 图像的ROI()
- 图像通道的拆分及合并
1.获取并修改像素值
先读入图像装入一个图像实体,然后该实体相当于一个多维list,可以直接用数组操作提取像素信息,像素信息为按照BGR顺序排列(灰度图像会返回其灰度值)的一个list,也可以用list操作提取其单个值
import numpy as np
import cv2 img = cv2.imread('2.jpg')
px = img[100,100]
print(px)
blue = img[100,100,0]
print(blue)
##[215 218 222]
##215
还可以通过直接给像素赋值的方式来改变像素值
img[100,100] = [255,255,255]
结合Numpy库的操作会获得更好的获取像素值方法
import numpy as np
import cv2 img = cv2.imread('2.jpg')
px = img.item(10,10,2)%获取像素值
print(px)
img.itemset((10,10,2),100)%修改像素值
print(img.item(10,10,2))
#211
#100
这个方法只能获取到标量值,即无法用img.item(10,10)这样的操作获取一个list,只能通过输入一个3维坐标获取单个值
2.获取图像属性
图像属性包括:行列,通道(色彩),图像数据类型,像素数目等
img.shape可以获取图像的形状,其返回值是一个包括行数,列数,通道数的元组。
import numpy as np
import cv2
img = cv2.imread('2.jpg')
print(img.shape)
#(300, 450, 3)
如果读入的图是一个灰度图,则不返回通道数,此时若调取第3个值会报错。可以通过检查返回值就可以知道加载图像是灰度图还是彩图。
img.size会返回图像的像素数
img.dtype返回的是图像的数据类型(一般是uint8),该步在debug时很重要,因为在OpenCV-Python代码中经常出现数据类型不一致的情况
3、图像ROI
即提取图像的特点区域,通过切片方式来实现
import numpy as np
import cv2
img = cv2.imread('2.jpg')
eye = img[160:180,140:150]
img[0:20,0:10] = eye
4.拆分及合并图像通道
即将BGR三个通道拆分分别进行操作,或将三个通道合并形成BGR图像
import numpy as np
import cv2
img = cv2.imread('2.jpg')
b,g,r = cv2.split(img) #可以把图像分成三个通道
# img = cv2.merge(b,g,r) 教程上说可以这样用,但输入后会提示只能输入两个值
cv2.imshow('img',r) #在尝试中发现imshow能显示的图像必须有1或3或4条信道
cv2.waitKey(0)
cv2.destroyAllWindows()
但是cv2.split操作较耗时,一般还是用切片方法
b = img[:,:,0]
同理,若要使所有红色通道均为0,可以
img[:,:,2] =
5.为图像扩边(填充)
如果想在图像周围创建一个边,就想相框一样,可以使用cv2.copyMakeBorder()函数。他经常在卷积运算或0填充时被用到。它包括以下几个参数:
- src输入图像
- top,bottom,left,right对应边界的像素数目
- borderType要添加那种类型的边界,类型有
– cv2.BORDER_CONSTANT 添加有颜色的常数值边界,还需要下一个参数(value)。
– cv2.BORDER_REFLECT 边界元素的镜像。比如: fedcba|abcdefgh|hgfedcb
– cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT跟上面一样,但稍作改动。例如: gfedcb|abcdefgh|gfedcba
– cv2.BORDER_REPLICATE 重复最后一个元素。例如: aaaaaa|abcdefgh|hhhhhhh
– cv2.BORDER_WRAP 不知道怎么说了, 就像这样: cdefgh|abcdefgh|abcdefg
- value边界颜色,当边界类型为cv2.BORDER_CONSTANT
OpenCV学习笔记(3)——图像的基本操作的更多相关文章
- [OpenCV学习笔记3][图像的加载+修改+显示+保存]
正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...
- OpenCV学习笔记(10)——图像梯度
学习图像梯度,图像边界等 梯度简单来说就是求导. OpenCV提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr和Lapacian.Sobel,Scharr其实就是求一阶或二阶导. ...
- OpenCV学习笔记(7)——图像阈值
简单阈值,自适应阈值,Otsu's二值化等 1.简单阈值 当像素值高于阈值时,我们给这个像素赋予一个新值,否则给他赋予另一个值.这个函数就是cv2.threshhold().这个函数的第一个参数就是原 ...
- opencv学习笔记(七)---图像金字塔
图像金字塔指的是同一图像不同分辨率的子图的集合,有向下取样金字塔,向上取样金字塔,拉普拉斯金字塔....它是图像多尺度表达的一种,最主要的是用于图像的分割 向下取样金字塔指高分辨率图像向低分辨率图像的 ...
- opencv学习笔记(六)---图像梯度
图像梯度的算法有很多方法:sabel算子,scharr算子,laplacian算子,sanny边缘检测(下个随笔)... 这些算子的原理可参考:https://blog.csdn.net/poem_q ...
- opencv学习笔记(五)----图像的形态学操作
图像的形态学操作有基本的腐蚀和膨胀操作和其余扩展形态学变换操作(高级操作)-----开运算,闭运算,礼帽(顶帽)操作,黑帽操作...(主要也是为了去噪声,改善图像) 形态学操作都是用于处理二值图像(其 ...
- opencv学习笔记3——图像缩放,翻转和阈值分割
#图像的缩放操作 #cv.resize(src,dsize,dst=None,,fx=None,fy=None,interpolation=None) #src->原图像,dsize->目 ...
- (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU
首页 视界智尚 算法技术 每日技术 来打我呀 注册 OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...
- OpenCV 学习笔记 02 使用opencv处理图像
1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...
随机推荐
- TensorFlow入门——bazel编译(带GPU)
这一系列基本上是属于我自己进行到了那个步骤就做到那个步骤的 由于新装了GPU (GTX750ti)和CUDA9.0.CUDNN7.1版本的软件,所以希望TensorFlow能在GPU上运行,也算上补上 ...
- CentOS7搭建FastDFS V5.11分布式文件系统(三)
1.测试 前面两篇博文已对FastDFS的安装和配置,做了比较详细的讲解.FastDFS的基础模块都搭好了,现在开始测试下载. 1.1 配置客户端 同样的,需要修改客户端的配置文件: /etc/fdf ...
- python、第五篇:数据备份、pymysql模块
一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 掌握: #1. 测试+链接 ...
- Jenkins+GitHub 项目环境搭建(一)
安装Jenkins yum install -y java-1.8.0-openjdk wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkin ...
- 分布式特点理解-Zookeeper准备
分布式环境特点 分布性 地域,区域,机房,服务器不同导致分布性 并发性 程序运行中,并发性操作很常见,比如同一个分布式系统中的多个节点,同时访问一个共享资源(数据库,分布式存储) 无序性 进程之间的消 ...
- xss技巧记录
1.iframe的srcdoc属性 先演示一下 <iframe srcdoc="<script>alert(1)</script>"> 浏览器渲 ...
- super运行错误解决方法
自己实践: 要是下面的不成功,可能的原因是: 目录/var/log/supervisor//var/log/supervisor/ /var/log/supervisor/ /var/log/supe ...
- BZOJ2306 [Ctsc2011]幸福路径[倍增]
这个有环的情况非常的讨厌,一开始想通过数学推等比数列的和,但是发现比较繁就不做了. 然后挖掘这题性质. 数据比较小,但是体力可以很接近1(恼怒),也就是说可能可以跳很多很多步.算了一下,大概跳了2e7 ...
- .NET Compiler Platform,一个.NET编译平台
.NET Compiler Platform,一个.NET编译平台 如何利用C# Roslyn编译器写一个简单的代码提示/错误检查? OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了 ...
- 《Python 3标准库》
在本书中,你会看到用来处理文本.数据类型.算法.数学计算.文件系统.网络通信.Internet.XML.Email.加密.并发性.运行时和语言服务等各个方面的实用代码和解决方案.在内容安排上,每一节都 ...