前言

opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的基本操作,坚持学习,共同进步。

系列教程参照OpenCV-Python中文教程

系统环境

系统:win7_x64;

python版本:python3.5.2;

opencv版本:opencv3.3.1;

内容安排

1.知识点介绍;

2.测试代码;

具体内容

1.知识点介绍;

使用的库包含cv2、numpy和matplotlib,包含修改图像像素、获取图像属性、提取ROI、拆分合并通道、图像填充等内容;

1.1 获取并修改图像像素;

1)读取一副图像,根据像素的行和列的坐标获取它的像素值,返回RGB的值,灰度图则返回灰度值;图像中的坐标是从0开始计数的。

px=img[100,100]#某坐标对应的像素值
print(px)
blue = img[100,100,0]#数字0表示选择BGR通道
print(blue)
img[101,101]=[235,255,255]
print(img[101,101])

2)numpy是经过优化了的进行快速矩阵运算的包,不推荐逐个获取像素值并修改,能矩阵运算就不要用循环。
建议使用numpy的array.item()和array.itemset()函数。但是返回是标量,如果想获得所有RGB的值,需要使用array.item()分割他们。

#numpy
print(img[10, 10])
print(img.item(10,10,2))
img.itemset((10,10,2),100)
print(img.item(10,10,2))

1.2 获取图像属性,包括行、列、通道数目、图像数据类型、像素数目等;

image.shape - 获取图像的形状,返回值是一个包含行数/列数/通道数的元组,如果图像是灰度图,返回值仅有行数和列数,

可通过检查返回值可以判断是灰度图还是彩色图;

image.size - 获取图像的像素数目;

img.dtype - 图像的数据类型,在debug时很重要,因为OpenCV-Python代码中经常出现数据类型的不一致;

print(img.dtype)

1.3 图像ROI,对图像的特定区域操作。ROI是使用numpy索引来获得的。要先知道图像尺寸,以及要移动的图像的像素坐标,可以使用matplotlib!!

ball =img[300:350,230:300]

1.4 拆分及合并图像通道,cv2.split()是比较耗时的操作,能用numpy就尽量使用。

r,g,b=cv2.split(img)#拆分
img=cv2.merge([r,g,b])#合并
b=img[:,:,0]#拆分b通道
img[:,:,2]=0#使用numpy索引使所有红色通道值都为0

1.5 图像扩边(填充),使用cv2.copyMakeBorder()函数。这经常在卷积运算或0填充时被用到;

具体的参数有输入图像、上下左右对应边界的像素数目、边界类型;

cv2.BORDER_CONSTANT添加有颜色的常数值边界,还需要下一个参数(value);
cv2.BORDER_REFLIECT边界元素的镜像。例如:fedcba | abcdefgh | hgfedcb;
cv2.BORDER_101或者cv2.BORDER_DEFAULT跟上面一样,但稍作改动,例如:gfedcb | abcdefgh | gfedcba;
cv2.BORDER_REPLICATE复后一个元素。例如: aaaaaa| abcdefgh|hhhhhhh;
cv2.BORDER_WRAP 不知怎么了, 就像样: cdefgh| abcdefgh|abcdefg;
value边界颜色;

blue = [0,0,255]#分别表示RGB通道;
constant = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_CONSTANT,value=blue)
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('constant')

2.测试代码;

import cv2
import numpy
img = cv2.imread('test.jpg')
px=img[100,100]#某坐标对应的像素值
print(px)
blue = img[100,100,0]#0表示BGR通道数
print(blue)
img[101,101]=[235,255,255]
print(img[101,101]) #numpy
print(img[10, 10])
print(img.item(10,10,2))
img.itemset((10,10,2),100)
print(img.item(10,10,2)) #获取图像属性(图像属性包括:行,列,通道,图像数据类型,像素数目等)
print(img.shape)#img.shape可以获得图像的形状,返回值是一个包含行数/列数/通道数的元组
#如果图像是灰度图,返回值仅有行数和列数,所以通过检查返回值可以判断是灰度图还是彩色图
#img.size可以返回图像的像素数目
print(img.size)
#img.dtype返回图像的数据类型,在debug时很重要,因为OpenCV-Python代码中经常出现数据类型的不一致
print(img.dtype) #图像ROI,对图像的特定区域操作。ROI是使用numpy索引来获得的。
#要先知道图像尺寸,以及你要移动的图像的像素坐标,可以使用matplotlib!!
ball =img[300:350,230:300]
cv2.imshow('image',img)#显示图像
img[500:550,300:370]=ball
cv2.imshow('imageROI',img)#显示图像 #拆分及合并图像通道,cv2.split()是比较耗时的操作,能用numpy就尽量使用。
r,g,b=cv2.split(img)#拆分
img=cv2.merge([r,g,b])#合并
b=img[:,:,0]#拆分b通道
img[:,:,2]=0#使用numpy索引使所有红色通道值都为0 #图像扩边(填充)
#使用cv2.copyMakeBorder()函数。这经常在卷积运算或0填充时被用到;
from matplotlib import pyplot as plt
blue = [0,0,255]#分别表示RGB通道;
replicate = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REFLECT101)
wrap = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_CONSTANT,value=blue) plt.subplot(231),plt.imshow(img,'gray'),plt.title('original')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('replicate')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('reflect')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('reflect101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('wrap')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('constant') plt.show()

测试结果显示

参考

1. opencv图像基本操作

opencv-python教程学习系列7-opencv图像基本操作的更多相关文章

  1. opencv-python教程学习系列8-opencv图像算术运算

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的算术运算,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...

  2. opencv-python教程学习系列2-读取/显示/保存图像

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的读取.显示以及保存,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: ...

  3. opencv ,亮度调整【【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整

    http://blog.csdn.net/poem_qianmo/article/details/21479533 [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调 ...

  4. 【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

  5. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  6. [转]《Python爬虫学习系列教程》

    <Python爬虫学习系列教程>学习笔记 http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多. ...

  7. opencv-python教程学习系列13-图像平滑

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像平滑,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...

  8. opencv-python教程学习系列12-图像阈值

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像阈值/二值化,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...

  9. opencv-python教程学习系列11-几何变换

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍几何变换,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...

随机推荐

  1. 转载:理解RESTful架构

    http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件" ...

  2. Codeforces 448E - Divisors

    448E - Divisors 思路: dfs.注意如果是1,直接返回,因为1的因子还是1. 因为x因子的因子还是x的因子,所以可以事先处理好x因子的因子在x因子中的位置. 不用这个方法也可以,用ma ...

  3. 推荐一款基于Angular实现的企业级中后台前端/设计解决方案脚手架

    ng-alain 是一个企业级中后台前端/设计解决方案脚手架,我们秉承 Ant Design 的设计价值观,目标也非常简单,希望在Angular上面开发企业后台更简单.更快速.随着『设计者』的不断反馈 ...

  4. 动态规划3--Help Jimmy

    动态规划3--Help Jimmy 一.心得 二.题目 三.分析 Jimmy跳到一块板上后,可以有两种选择,向左走,或向右走.走到左端和走到右端所需的时间,是很容易算的.如果我们能知道,以左端为起点到 ...

  5. 使用MyBatis Generator自动生成实体、mapper和dao层

    原文链接 通过MyBatis Generator可以自动生成实体.mapper和dao层,记录一下怎么用的. 主要步骤: 关于mybatis从数据库反向生成实体.DAO.mapper: 参考文章:ht ...

  6. jsp forward跟redirect区别

    forward 相当于php的 require/include 属于服务器包含/跳转 request.getRequestDispatcher("result.jsp").forw ...

  7. Confluence 6 完成你的任务

    很好,宇航员们,你已经令人钦佩的展示了你自己的.我们确定你新招募的员工已经对你了解的 Confluence 知识感到赞叹. 在这个指南中,我们已经完成了: 在主面板中对 Confluence 的功能进 ...

  8. Codeword CodeForces - 666C (字符串计数)

    链接 大意:求只含小写字母, 长度为n, 且可以与给定模板串匹配的字符串个数 (多组数据) 记模板串为P, 长为x, 总串为S. 设$f_i$为S为i时的匹配数, 考虑P最后一位的首次匹配位置. 若为 ...

  9. mysql timestamp的默认值

    当default 0,default '0000-00-00 00:00:00'都失效的时候,请尝试下 ALTER table `coupon_gift` add column `time_end` ...

  10. python-day10--字符编码

    1.回顾: 软件→操作系统→硬件 2.文本编辑器: 启动:硬盘→内存→运行(cpu) 读文件:硬盘→内存→CPU读 存文件:保存到硬盘中 3.python解释器 启动:硬盘→内存→运行(cpu) 读文 ...