Python-OpenCV 处理图像(一):基本操作 cv2
0x00. 图片读、写和显示操作
安装好 OpenCV 之后,首先尝试加载一张最简单的图片并显示出来,代码示例:
第一种方式使用cv2.cv的LoadImage
、ShowImage
和SaveImage
函数
import cv2.cv as cv# 读图片
image=cv.LoadImage('img/image.png', cv.CV_LOAD_IMAGE_COLOR)#Load the image
#Or just: image=cv.LoadImage('img/image.png')cv.NamedWindow('a_window', cv.CV_WINDOW_AUTOSIZE) #Facultative
cv.ShowImage('a_window', image) #Show the image# 写图片
cv.SaveImage("thumb.png", thumb)
cv.WaitKey(0) #Wait for user input and quit
也可以直接使用cv2的imread
、imwrite
和imshow
函数
import numpy as np
import cv2img = cv2.imread('messi5.jpg',0)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exitcv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exitcv2.imwrite('messigray.png',img)cv2.destroyAllWindows()
imread
函数还可以定义加载的mode,默认是以RGB模式处理图片:
import cv2
grayImage = cv2.imread('MyPic.png', cv2.CV_LOAD_IMAGE_GRAYSCALE)
# 可选参数CV_LOAD_IMAGE_COLOR (BGR), CV_LOAD_IMAGE_GRAYSCALE (grayscale), CV_LOAD_IMAGE_UNCHANGED(neither)
cv2.imwrite('MyPicGray.png', grayImage)
0x01. 获取图片属性
import cv2
img = cv2.imread('img/image.png')
print img.shape
# (640, 640, 3)
print img.size
# 1228800
print img.dtype
# uint8
# 在debug的时候,dtype很重要
0x02. 输出文本
在处理图片的时候,我们经常会需要把一些信息直接以文字的形式输出在图片上,下面的代码将实现这个效果:
import cv2.cv as cvimage=cv.LoadImage('img/lena.jpg', cv.CV_LOAD_IMAGE_COLOR) #Load the imagefont = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 3, 8) #Creates a fonty = image.height / 2 # y position of the text
x = image.width / 4 # x position of the textcv.PutText(image,"Hello World !", (x,y),font, cv.RGB(255, 255, 255)) #Draw the textcv.ShowImage('Hello World', image) #Show the imagecv.WaitKey(0)
cv2:
cv2.putText(frame, 'Hello World', (300,100), 0, 0.5, (0,0,255),2)
0x03. 缩放图片
下面的例子将实现缩放图片并保存,这个在使用 OpenCV 做图像处理的时候都是很常用的操作:
import cv2.cv as cvim = cv.LoadImage("img/alkaline.jpg") #get the imagethumb = cv.CreateImage((im.width / 2, im.height / 2), 8, 3) #Create an image that is twice smaller than the originalcv.Resize(im, thumb) #resize the original image into thumb
#cv.PyrDown(im, thumb)cv.SaveImage("thumb.png", thumb) # save the thumb image
cv2:
import cv2
import numpy as np
img = cv2.imread('messi5.jpg')
res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)#ORheight, width = img.shape[:2]
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)
0x04. 图像平移
import cv2
import numpy as npimg = cv2.imread('messi5.jpg',0)
rows,cols = img.shapeM = np.float32([[1,0,100],[0,1,50]])
dst = cv2.warpAffine(img,M,(cols,rows))cv2.imshow('img',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
0x05. 图像旋转
img = cv2.imread('messi5.jpg',0)
rows,cols = img.shapeM = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
dst = cv2.warpAffine(img,M,(cols,rows))
0x06. 仿射变换
import cv2
import numpy as npimg = cv2.imread('mao.jpg')
rows,cols,ch = img.shapepts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])M = cv2.getAffineTransform(pts1,pts2)dst = cv2.warpAffine(img,M,(cols,rows))cv2.imshow('image',dst)
cv2.waitKey(0)
0x07. 图像颜色变换
实际使用过程中,我们经常也需要对一些图片的颜色空间做一些改变之类的:
c2.cv:
import cv2.cv as cv
im=cv.LoadImage('img/fruits.jpg',cv.CV_LOAD_IMAGE_COLOR)
res = cv.CreateImage(cv.GetSize(im), cv.CV_8UC2, 3) #cv.CV_32F, cv.IPL_DEPTH_16S, ...
cv.Convert(im, res)
cv.ShowImage("Converted",res)
res2 = cv.CreateImage(cv.GetSize(im), cv.CV_8UC2, 3)
cv.CvtColor(im, res2, cv.CV_RGB2BGR) # HLS, HSV, YCrCb, ....
cv.ShowImage("CvtColor", res2)
cv.WaitKey(0)
cv.Convert():将图片从一个颜色空间转到另一个颜色空间
cv.CvtColor(src, dst, code):
cv2:
cv2.cvtColor(input_image, flag)函数实现图片颜色空间的转换,flag 参数决定变换类型。如 BGR->Gray flag 就可以设置为 cv2.COLOR_BGR2GRAY 。
一个简单的例子,下面的代码实现识别摄像视频中蓝色的部分:
import cv2
import numpy as npcap = cv2.VideoCapture(0)while(1):# 读取视频的每一帧_, frame = cap.read()# 将图片从 BGR 空间转换到 HSV 空间hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)# 定义在HSV空间中蓝色的范围lower_blue = np.array([110,50,50])upper_blue = np.array([130,255,255])# 根据以上定义的蓝色的阈值得到蓝色的部分mask = cv2.inRange(hsv, lower_blue, upper_blue)res = cv2.bitwise_and(frame,frame, mask= mask)cv2.imshow('frame',frame)cv2.imshow('mask',mask)cv2.imshow('res',res)k = cv2.waitKey(5) & 0xFFif k == 27:breakcv2.destroyAllWindows()
以上的代码给出了视频中获取兴趣对象的基本思想。
0x08. 通道的拆分/合并处理
对于一张图片的 R、G、B 通道,我们可以很方便的使用 OpenCV 获取并分离或者合并:
(这是将图像灰度化处理的一种方式)
cv2.cv
import cv2.cv as cvorig = cv.LoadImage('img/fruits.jpg')
b = cv.CreateImage(cv.GetSize(orig), orig.depth, 1)
g = cv.CloneImage(b)
r = cv.CloneImage(b)
cv.Split(orig, b, g, r, None)merged = cv.CreateImage(cv.GetSize(orig), 8, 3)
cv.Merge(g, b, r, None, merged)cv.ShowImage("Image", orig)
cv.ShowImage("Blue", b)
cv.ShowImage("Green", g)
cv.ShowImage("Red", r)
cv.ShowImage("Merged", merged)cv.WaitKey(0)
cv2
import cv2
img = cv2.imread('img/image.png')
b,g,r = cv2.split(img)
img = cv2.merge((b,g,r))
0x09. 图片添加边距
cv2.copyMakeBorder函数
import cv2
import numpy as npBLUE = [255,0,0]img1 = cv2.imread('opencv_logo.png')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)
Python-OpenCV 处理图像(一):基本操作 cv2相关推荐
- Python+OpenCV判断图像是黑底还是白底
前言 本篇博客使用Python+OpenCV判断图像是黑底还是白底,利用图像对角线上的黑白像素点个数进行判断,详情见下文. 本篇博客内容包含代码逻辑.说明.依赖.实现,这几部分.代码实现部分包含2种实 ...
- Python OpenCV 之图像乘除与像素的逻辑运算,图像处理取经之旅第 17 天
今天的学习的内容是:通过 Python OpenCV 对图像实现乘除操作,涉及函数为 cv2.multiply 与 cv2.divide.后面又补充了一些像素的逻辑运算,以及一个综合案例 cv2.mu ...
- 【Python OpenCV】图像直方图 calcHist方法 equalizeHist方法
[Python OpenCV]图像直方图 calcHist方法 equalizeHist方法 (一)图像直方图 图像的构成是有像素点构成的,每个像素点的值代表着该点的颜色(灰度图或者彩色图).所谓直方 ...
- Python+OpenCV:图像修复(Image Inpainting)
Python+OpenCV:图像修复(Image Inpainting) 理论 Most of you will have some old degraded photos at your home ...
- Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features)
Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features) 理论 We know SIFT us ...
- Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)
Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...
- Python+OpenCV:图像Shi-Tomasi角点检测器
Python+OpenCV:图像Shi-Tomasi角点检测器 理论 The scoring function in Harris Corner Detector was given by: Inst ...
- Python+OpenCV:图像Harris角点检测(Harris Corner Detection)
Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...
- Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)
Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...
- Python+OpenCV:图像轮廓
Python+OpenCV:图像轮廓 轮廓是什么? 轮廓可以简单地解释为一条连接所有连续点(沿边界)的曲线,具有相同的颜色和强度. 轮廓线是形状分析.目标检测和识别的重要工具. 为了获得更好的精度,可 ...
最新文章
- Spring Security太复杂?试试这个轻量、强大、优雅的权限认证框架!
- LACP/PAGP的定义与差别—Vecloud微云
- Android Studio-目录结构
- Linux 基础 (1) - 在Win10上使用Hyper-v虚拟机安装CentOS7
- vant部署_记录mpvue+vant-weapp的使用(一):安装配置使用,引入vant-weapp
- JavaScript面试大全(二)
- tomcat集群共享session
- (转)C#读写共享文件
- python 序列化之JSON和pickle详解
- 泛微OA前端代码开发方式
- JavaScript—— 常见网页特效
- Overlay网络和VXLAN
- [转转转]面试常见逻辑推理题目及答案整理
- 一、贴片电阻大小的识别与常用的原理图标注规范
- 理解目标检测里的Anchor-based和Anchor-free
- 无响应 --- 问题事件名称: AppHangB1
- Python自动生成ffmpeg转码HEVC (X265,H265) 命令
- 【面试题目】2019年中心面试题目记录
- Freeline使用指南,完美亲测,能跑起来,增量编译速度飞起来
- 秒速五厘米(快速二分跳跃查找答案)
热门文章
- python中char的用法_如何从C++返回char **并使用cType在Python中填充它?
- python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名参数 形式参数 默认参数 可变参数 可选参数 位置顺序...
- JdbcTemplate(操作数据库-修改和删除功能)
- malloc 结构体_二进制安全之堆溢出(系列)——堆基础 amp; 结构(二)
- java汉字如何通过字节传输,求助,java中怎么用字节流读写汉字
- beaninfo详解源码解析 java_Java后端精选技术:源码解析Spring Cloud Zuul
- matlab 编译 java_MATLAB编译器运行时(MCR)编译器
- centos 8 kubernetes安装详解_8方面图文详解,电气安装工程施工工艺!
- idea 不打开文件提示错误_IDEA无法正常启动(打不开报错)
- qt 文字倾斜投影_帅呆!钢铁侠中的激光投影键盘终于量产了,炫酷又好用