Python-OpenCV基本操作cv2
1.图片加载、显示和保存
import cv2
# 生成图片
img = cv2.imread("1.jpg")
# 生成灰色图片
imgGrey = cv2.imread("1.jpg", 0)
# 展示原图
cv2.imshow("img", img)
# 展示灰色图片
cv2.imshow("imgGrey", imgGrey)
# 等待图片的关闭
cv2.waitKey()
# 保存灰色图片
cv2.imwrite("Copy.jpg", imgGrey)
2.图像显示窗口创建与销毁
cv2.namedWindow(窗口名,属性) 创建一个窗口
属性—指定窗口大小模式:
cv2.WINDOW_AUTOSIZE:根据图像大小自动创建大小
cv2.WINDOW_NORMAL:窗口大小可调整
cv2.destoryAllWindows(窗口名) 删除任何建立的窗口
import cv2 img = cv2.imread("1.jpg") cv2.namedWindow("img", cv2.WINDOW_NORMAL)
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()
3.图片宽、高、通道数获取
img.shape 返回图像高(图像矩阵的行数)、宽(图像矩阵的列数)和通道数3个属性组成的元组,若图像是非彩色图,则只返回高和宽组成的元组。
import cv2 img = cv2.imread("1.jpg")
imgGrey = cv2.imread("1.jpg", 0) sp1 = img.shape
sp2 = imgGrey.shape print(sp1)
print(sp2)
# ======输出=======
#(1200, 1920, 3)
#(1200, 1920)
4.图像像素数目和图像数据类型的获取
图像矩阵img的size属性和dtype分别对应图像的像素总数目和图像数据类型。一般情况下,图像的数据类型是uint8。
import cv2 img = cv2.imread("1.jpg") imgSize = img.size
print(imgSize) ty = img.dtype
print(ty)
#======输出========
#6912000
#uint8
5 生成指定大小的空图像
生成指定大小的空图像
import cv2
import numpy as np img = cv2.imread("1.jpg")
imgZero = np.zeros(img.shape, np.uint8) imgFix = np.zeros((300, 500, 3), np.uint8)
# imgFix = np.zeros((300,500),np.uint8) cv2.imshow("img", img)
cv2.imshow("imgZero", imgZero)
cv2.imshow("imgFix", imgFix)
cv2.waitKey()
6. 访问和操作图像像素
OpenCV中图像矩阵的顺序是B、G、R。可以直接通过坐标位置访问和操作图像像素。
import cv2 img = cv2.imread("01.jpg") numb = img[50,100]
print numb img[50,100] = (0,0,255)
cv2.imshow("img",img)
cv2.waitKey()
分开访问图像某一通道像素值也炒鸡方便:
import cv2 img = cv2.imread("01.jpg") img[0:100,100:200,0] = 255
img[100:200,200:300,1] = 255
img[200:300,300:400,2] = 255 cv2.imshow("img",img)
cv2.waitKey()
嗯,不得不说Python是一个很神奇的存在。
Python中,更改图像某一矩形区域的像素值也很方便:
import cv2 img = cv2.imread("01.jpg") img[0:50,1:100] = (0,0,255) cv2.imshow("img",img)
cv2.waitKey()
7. 图像三通道分离和合并
分离图像通道可以使用cv2中的split函数,合并使用merge函数。
import cv2 img = cv2.imread("01.jpg") b , g , r = cv2.split(img) # b = cv2.split(img)[0]
# g = cv2.split(img)[1]
# r = cv2.split(img)[2] merged = cv2.merge([b,g,r]) cv2.imshow("Blue",b)
cv2.imshow("Green",g)
cv2.imshow("Red",r) cv2.imshow("Merged",merged)
cv2.waitKey()
8. 在图像上输出文字
使用putText函数在图片上输出文字,函数原型:
putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)
- img: 图像
- text:要输出的文本
- org: 文字的起点坐标
- fontFace: 字体
- fontScale: 字体大小
- color: 字体颜色
- thickness: 字图加粗
import cv2 img = cv2.imread("01.jpg") cv2.putText(img,"Print some text to img",(100,100),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255)) cv2.imshow("img",img)
cv2.waitKey()
9. 图像缩放
缩放使用cv2.resize()函数,resize函数里的size第一个是宽(列),第二个是高(行)。
import cv2 img = cv2.imread("1.jpg")
cv2.imshow("img", img) imgg = cv2.resize(img, (200, 100)) cv2.imshow("imgg", imgg) cv2.waitKey()
10.图片灰化处理
# from matplotlib import pyplot as plt
# import cv2
# from pylab import *
#
# # 添加中文字体支持
# from matplotlib.font_manager import FontProperties
# font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size = 14)
#
# # 载入图像
# im = cv2.imread('1.jpg')
# # 显示原始图像
# fig = plt.figure()
# subplot(121)
# plt.gray()
# im2 = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) #OpenCV采用BGR排列顺序,需要转换一下.
# imshow(im2)
# title(u'彩色图', fontproperties= font)
# axis('off')
# # 显示灰度化图像
# # 颜色空间转换
# gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
# plt.subplot(122)
# plt.gray()
# imshow(gray)
# title(u'灰度图', fontproperties= font)
# axis('off')
# show()
转换后的结果
11.在python3 下使用OpenCV抓取摄像头图像提取蓝色
import cv2
import numpy as np cap = cv2.VideoCapture(0)
for i in range(0, 19):
print(cap.get(i))
while(1):
ret, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) lower_blue = np.array([100, 47, 47])
upper_blue = np.array([124, 255,255]) mask = cv2.inRange(hsv, lower_blue, upper_blue) #蓝色掩模 res = cv2.bitwise_and(frame, frame, mask = mask) cv2.imshow(u"Capture", frame)
cv2.imshow(u"mask", mask)
cv2.imshow(u"res", res) key = cv2.waitKey(1)
if key & 0xff == ord('q') or key == 27:
print(frame.shape,ret)
break
cap.release()
cv2.destroyAllWindows()
以下是从wangyblzu博客截下来的HSV颜色分量范围
https://www.cnblogs.com/wangyblzu/p/5710715.html
三张结果图
Python-OpenCV基本操作cv2的更多相关文章
- OpenCV中cv2的用法
一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数 ...
- python OpenCV使用
关于OpenCV简介 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C ...
- python opencv识别蓝牌车牌号 之 取出车牌号 (1/3)
概述 车牌识别是计算机视频图像识别技术在车辆牌照识别中的一种应用,通常来讲如果结合opencv进行车牌识别主要分为四个大步骤,分别为: 图像采集 车牌定位 分割车牌字符 字符识别 当然,如果结合了机器 ...
- 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台
搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...
- .NET + OpenCV & Python + OpenCV 配置
最近需要做一个图像识别的GUI应用,权衡了Opencv+ 1)QT,2)Python GUI,3).NET后选择了.NET... 本文给出C#+Opencv和Python+Opencv的相应参考,节省 ...
- RPi 2B python opencv camera demo example
/************************************************************************************** * RPi 2B pyt ...
- Python+OpenCV图像处理(一)
Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...
- python opencv show图片,debug技巧
debug的时候可以直接把图片画出来debug. imshow函数就是python opencv的展示图片的函数,第一个是你要起的图片名,第二个是图片本身.waitKey函数是用来展示图片多久的,默认 ...
- Python+OpenCV图像处理(一)——读取显示一张图片
先在此处先声明,后面学习python+opencv图像处理时均参考这位博主的博文https://blog.csdn.net/u011321546/article/category/7495016/2? ...
- Python+opencv 图像拼接
1.http://www.cnblogs.com/skyfsm/p/7411961.html ,给出了很好地拼接算法实现 2.由于不是Python的,所以简单做了一些翻译转成Python+opencv ...
随机推荐
- Java通过POI读取Excel
package com.hd.all.test.testjava; import java.io.File; import java.io.FileInputStream; import java.i ...
- 产品设计教程:利用“系列位置效应”优化UI
任何博得人们喜欢的产品都在一定程度上契合了用户的心理需求.设计和心理学息息相关,掌握一些基本心理学知识,设计师的作品更能在潜意识中抓住用户的心. 系列位置效应 “系列位置效应”(The Serial ...
- list异常
可能定义的时候没有初始化把 private List<Msg> msgList = new ArrayList<>(); 为啥我android老是忘了new ArrayList
- 数据加密之MD5加密
MD5是一个安全的散列算法,有两个特点:1.输入两个不同的明文(一段原始的数字信息)不会得到相同的输出值2.根据输出值,不能得到原始的明文,即过程不可逆所以要解密MD5没有现成的算法,只能用穷举法,把 ...
- python知识补足
1.class的init功能,初始化class,给出一些初始值 __init__可以理解成初始化class的变量,取自英文中initial 最初的意思.可以在运行时,给初始值附值, class Cal ...
- js跨域需要token。
将rems从tms中独立出来以后,每次都需要先打开tms,再打开rems,如果我足够聪明,那么很容易可以分析得到原因. 第一,会导致跨域出现问题的易错点就那么几个,是否加上“Access-Contro ...
- python socket编程笔记
用python实现一个简单的socket网络聊天通讯 (Linux --py2.7平台与windows--py3.6平台) 人生苦短之我用Python篇(socket编程) python之路 sock ...
- spring 框架的优点
谈spring 框架的优点就是说spring 框架2大核心技术的优点 1. 控制反转:控制反转是将对象的创建和管理交给spring容器,已经管理对象之间的依赖关系, 那么将对象的创建和生命周期的管理交 ...
- Discuz-阅读权限
设置用户浏览帖子或附件的权限级别,范围 0-255,0 为禁止用户浏览任何帖子或附件. 当用户的阅读权限小于帖子或附件的阅读权限许可(默认时为 1)时, 用户将不能阅读该帖子或下载该附件
- 【2017-04-20】Sql字符串注入式攻击与防御,实体类,数据访问类
字符串攻击 所谓sql字符串注入式攻击就是在用户输入界面输入通过精心编制的含有某种指令的字符串,来改变C#中连接数据库要执行的sql语句,从而对数据库进行攻击性操作 在用户输入界面输入 a');up ...