目标
• 获取像素值并修改
• 获取图像的属性(信息)
• 图像的ROI()
• 图像通道的拆分及合并

几乎所有这些操作与Numpy 的关系都比与OpenCV 的关系更加紧密,因此熟练Numpy 可以帮助我们写出性能更好的代码。

# -*- coding: utf-8 -*-
"""
Created on Mon Jan 22 13:26:57 2018
"""import cv2
import numpy as np
from matplotlib import pyplot as plt#opencv 读图
img = cv2.imread("E:\\python\\opencv\\images\\demo0.png")#根据像素的行和列的坐标获取他的像素值。对BGR 图像而言,返回值为B,G,R 的值。对灰度图像而言,会返回他的灰度值
'''
px=img[100,100]
print px
blue=img[100,100,0]
print blue
'''#修改像素值
'''
img[100,100]=[255,255,255]
print img[100,100]
'''#获取像素值及修改的更好方法。
'''
print img.item(10,10,2)
img.itemset((10,10,2),100)
print img.item(10,10,2)
'''#获取图像属性,图像的属性包括:行,列,通道,图像数据类型,像素数目等'''
print img.shape
print img.size
print img.dtype
#(552L, 1112L, 3L)
#1841472
#uint8
'''#图像ROI,有时你需要对一幅图像的特定区域进行操作。
'''
ball=img[280:340,330:390]
img[273:333,100:160]=ball
'''#拆分及合并图像通道,有时我们需要对BGR 三个通道分别进行操作。这是你就需要把BGR 拆分成单个通道。有时你需要把独立通道的图片合并成一个BGR 图像。你可以这样做:
#:cv2.split() 是一个比较耗时的操作。只有真正需要时才用它,能用Numpy 索引就尽量用。
'''
b,g,r=cv2.split(img)
img=cv2.merge(b,g,r)
#或者
b=img[:,:,0]
#或者
img[:,:,2]=0
'''#为图像扩边(填充)
'''
如果你想在图像周围创建一个边,就像相框一样,你可以使用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
'''
#看下面的小例子
'''
img1 = img
BLUE=[255,0,0]
replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'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('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
'''#图像上的算术运算#你可以使用函数cv2.add() 将两幅图像进行加法运算,当然也可以直接使用numpy,res=img1+img。两幅图像的大小,类型必须一致,或者第二个图像可以使一个简单的标量值。
#OpenCV 中的加法与Numpy 的加法是有所不同的。OpenCV 的加法是一种饱和操作,而Numpy 的加法是一种模操作。
'''
x = np.uint8([250])
y = np.uint8([10])
print cv2.add(x,y) # 250+10 = 260 => 255
print x+y # 250+10 = 260 % 256 = 4
'''
#图像混合,函数cv2.addWeighted() 可以按下面的公式对图片进行混合操作。
'''
img1=img
img2=cv2.imread('E:\\python\\opencv\\images\\demo2.png')
dst=cv2.addWeighted(img1,0.7,img2,0.3,0)
'''
#使用OpenCV 检测程序效率
'''
e1 = cv2.getTickCount()
# your code execution
e2 = cv2.getTickCount()
time = (e2 - e1)/ cv2.getTickFrequency()
'''cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

opencv图像的基础操作相关推荐

  1. 2、OpenCV图像的读写操作

    OpenCV图像的读写操作 概要 图像由像素组成. 像素可以被认为是非常小的正方形结构,当连接在一起时会生成图像. 它们是任何图像的最小组成部分. 如果您仔细查看前面的图像,您将能够在图像中看到一些正 ...

  2. 【opencv】(1) 基础操作:图像视频读取、图像截取、颜色通道

    主要内容有:图像及视频的读取和保存.图像显示.转换灰度图.图像截取.颜色通道提取和组合 那我们开始吧. 1. 图像操作 首先我们导入opencv库,彩色图像一般都是由RGB(红绿蓝)三颜色通道构成,灰 ...

  3. opencv resize_opencv-python库基础操作(一)

    点赞再看,养成习惯!点赞再看,养成习惯!点赞再看,养成习惯!opencv-python库基础操作 0.安装opencv-python pip install opencv-python 进行下载并安装 ...

  4. 如何将图像保存至计算机G7X,opencv之读入一幅图像,显示图像以及如何保存一副图像,基础操作...

    本文使用的函数: cv2.imread()读入一幅图像cv2.imshow()显示一幅图像cv2.imwrite()写入一幅图像 读入图像 cv2.imread(参数1,参数2) 第一个参数是要读取图 ...

  5. OpenCV+python图像处理基础操作

    1.读写图像(建议使用绝对路径) import cv2 from cv2 im = cv2.imread('C:/Users/admin/Desktop/test/1.jpg') cv2.imwrit ...

  6. C/C++ OpenCV图像的阈值操作

    固定阈值操作:Threshold() double threshold( inputArray src, outPutArray dst, double thresh, double maxval, ...

  7. matlab从入门到精通:图像可视化基础操作

    matlab图像可视化 基本要求 (1)掌握图形窗口的创建与控制,以及图形窗口的基本操作: (2)熟练掌握二维和三维绘图基本的命令.线型控制:(3)初步掌握用特殊的图形来表现特殊数据的性质,如面积图. ...

  8. OpenCV入门基础操作(二)----图像像素的处理

    OpenCV入门基础操作(二)----图像像素的处理 像素处理 读取一个图像像素 修改像素值 代码案例 像素处理 读取一个图像像素 在读取图像的时候一般要用到如下的命令: 返回值=图像(位置参数), ...

  9. openCV 图像和视频处理基础操作

    openCV 基础操作 A.数据读取-图像 B. 数据读取-视频 C. 截取部分图像数据 D.颜色通道提取 E.边界填充 F.图像融合 G. 图像阈值 H. 图像平滑 openCV 参考相关技术博客和 ...

最新文章

  1. 史上最全DSO学习资料
  2. 神经网络无法区分异同,而且这个缺陷是本质性的
  3. spoj String To Binary(数字转二进制、读取数字和字符串)
  4. 5年博龄只有十几篇文章,惭愧呀
  5. CVPR 2019 | 基于骨架表达的单张图片三维物体重建方法
  6. python类加载机制_PHP面向对象自动加载机制原理与用法分析
  7. 微软开始提供公共预览版Windows 8.1下载
  8. 物联网在水位监测中的应用
  9. 《机器人学经典教程》——2.2 控制论
  10. 【PAT】2021年冬季考试甲级,摸鱼游记、92分
  11. his提供哪些服务_品牌战略咨询能为企业提供哪些服务
  12. 最短路问题——spfa算法
  13. yocto系列讲解[技巧篇]72 - BBCLASSEXTEND变量的作用
  14. java Io,读写文件拒绝访问
  15. 悉尼大学INFO1110/COMP9001课业解析
  16. 为什么键盘没反应了 键盘没反应原因分析及解决方法
  17. minio 图片存储服务器的部署和使用
  18. 谷歌浏览器调试技巧【三】
  19. springboot集成ES实现磁盘文件全文检索
  20. 作为传送信息的公共通道 微型计算机的系统,微型计算机的系统总线是CPU与其他部件之间传送( )信息的公共通道...

热门文章

  1. 16行代码AC_【第十届蓝桥杯省赛c/c++B组真题解析】7.完全二叉树的权值
  2. 暴力优化解法+哈希解法——2016年第七届蓝桥杯省赛b组第八题 四平方和
  3. Mysql剖析单条查询三种方法
  4. switch语句格式_JavaScript流程控制语句_if语句(十一)
  5. Docker相关概念与安装(Docker-CE)
  6. u3d 总是背向相机_纪念光学科学家“肖特”的相机
  7. oracle临时表的优点,详解Oracle临时表的几种用法和意义
  8. 图像化转向名词解释_遥感——数字图像处理名词解释及简单整理
  9. win7计算机管理禁用,Win7任务管理器已被系统管理员禁用怎么办
  10. 飞桨模型保存_史上最全解读|飞桨模型库重大升级,主流算法模型全覆盖