Python入门学习 part 3 :OpenCV图像简单操作

Python入门学习 part 3 :OpenCV图像简单操作

最近认识了OpenCV,我们来介绍一下OpenCV图像的简单操作

读取图片

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/1.jpg')#绝对路径(推荐),也可以是相对路径
img1=cv2.imread('C:\\Users\\admin\\Desktop\\20191027-Pyhton+OpenCV\\a\\1.jpg')#python中'\\'与'/'等同
cv2.imshow('text',img)#imshow指读取图片
cv2.imshow('text1',img)
cv2.waitKey(0)#没有这句话,图片将会一闪而过

注意读取图片要标明图片名和图片类型(读取图片相同)

保存图片

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/1.jpg')
#OpenCV可以实现不同格式图片转换,支持jpg、bmp、png等图片格式相互无损转换
cv2.imwrite('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/1.png',img)

保存图片时标明路径,图片名,及图片格式

截取部分图像

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')
frame=img[200:400,200:400]#截取200-400行,200-400列的图像
cv2.imshow('text',frame)
cv2.waitKey(0)

注意格式
变量名2=变量名1[x1:y1,x2:y2](有行截取和列截取)
截取时是中括号不是括号

图片翻转

cv2.flip()函数

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')
img1=cv2.flip(img,1)#大于0,左右翻转
img2=cv2.flip(img,0)#等于0,上下翻转
img3=cv2.flip(img,-1)#小于0,先上下翻转再左右翻转
cv2.imshow('text',img)
cv2.imshow('text1',img1)
cv2.imshow('text2',img2)
cv2.imshow('text3',img3)
cv2.waitKey(0)

注意使用flip()时应注意img在前不在后(特殊)

缩放图片

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')
img1=cv2.resize(img,(500,500))#设置输出图片的尺寸
img2=cv2.resize(img,None,fx=0.7,fy=0.7)#None指图片尺寸,但我们设置了缩放因子
cv2.imshow('text',img1)
cv2.imshow('text1',img2)
cv2.waitKey(0)

注意:
设置缩放因子时,尺寸得打None(否则语法错误),且缩放因子是fx,fy不是x,y

转化为灰度图像

import cv2
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')#cv2.imread读进来的图片格式是BGR(W,H,C),而不是RGB
img1=cv2.resize(img,(400,400))
cv2.imshow('BGR',img1)
img2=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)#将BGR转化成RGB
cv2.imshow('RGB',img2)
img3=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)#将BGR转化成灰度图像
cv2.imshow('GRAY',img3)
cv2.waitKey(0)

效果图在这里插入图片描述
注意:cvtColor中C是大写
2前为转化前,2后为转化后(且均用大写表示)
imread读进的格式为BGR非RGB

在一个窗口中显示两张图片

import cv2
import numpy as np
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')
img2=cv2.resize(img,(200,200))
img3=np.vstack([img2,img2])#在竖直方向上堆叠
img4=np.hstack([img2,img2])#在水平方向平铺
cv2.imshow('text',img3)
cv2.imshow('text1',img4)
cv2.waitKey(0)

注意,引用了numpy
vstack(竖直)和和hstack(水平)前用numpy(不是cv2)

绘图功能

import cv2
import numpy as np
img  = 255*np.ones((500,500,3),np.uint8)#unit8:0~255#(500,500,3)指图片尺寸和背景板(白黑灰)
font = cv2.FONT_HERSHEY_DUPLEX#字体(网上有各种版本)
#以下注释从左到右
#输入内容,字体座标,字体,字体大小,字体颜色(BGR),字体粗细
cv2.putText(img,'good',(50,300),font,1,(25,25,25),2)
#起始点座标,终止点座标,颜色,粗细
cv2.line(img,(70,80),(90,100),(0,0,0),5)
#左上点座标,右下点座标,颜色,粗细
cv2.rectangle(img,(80,100),(100,20),(0,0,0),5)
#圆心座标,半径,颜色,粗细(-1控制是否填充)
cv2.circle(img,(60,60),50,(0,0,255),1)
#中心点,(长轴,短轴),偏转角度,起始角度,终止角度,颜色,粗细(-1控制填充)
cv2.ellipse(img,(100,300),(50,50),160,0,360,(20,213,79),1)
cv2.imshow("Draw", img)
cv2.waitKey(0)

下面分享一只作者做的小猪佩奇
附上代码

import cv2
import numpy as np
img=255*np.ones((700,700,3),np.uint8)
cv2.ellipse(img,(125,300),(60,60),180,160,390,(203,192,255),-1)#头
cv2.ellipse(img,(146,260),(75,50),160,0,360,(203,192,255),-1)#鼻子
cv2.circle(img,(120,235),10,(255,255,255),-1)#眼睛
cv2.circle(img,(148,222),10,(255,255,255),-1)#眼睛
cv2.circle(img,(123,235),5,(0,0,0),-1)#眼睛
cv2.circle(img,(151,222),5,(0,0,0),-1)#眼睛
cv2.ellipse(img,(195,244),(30,20),80,0,360,(71,99,255),3)#鼻子圈
cv2.circle(img,(190,235),4,(0,0,0),-1)#鼻孔
cv2.circle(img,(200,230),4,(0,0,0),-1)#鼻孔
cv2.ellipse(img,(140,300),(30,30),180,170,350,(0,0,255),3)#嘴巴
cv2.circle(img,(90,290),15,(255,0,255),-1)#腮红
cv2.ellipse(img,(90,225),(20,10),60,0,360,(203,192,255),-1)#耳朵
cv2.ellipse(img,(125,205),(20,10),70,0,360,(203,192,255),-1)#耳朵
cv2.ellipse(img,(125,430),(100,65),90,90,270,(203,192,255),-1)#身体
cv2.line(img,(170,370),(210,390),(203,192,255),4)#右手臂
cv2.line(img,(210,390),(213,395),(203,192,255),4)#手指
cv2.line(img,(210,390),(213,385),(203,192,255),4)#手指
cv2.line(img,(210,390),(219,392),(203,192,255),4)#手指
cv2.line(img,(85,360),(40,330),(203,192,255),4)#左手臂
cv2.line(img,(40,330),(37,335),(203,192,255),4)#手指
cv2.line(img,(40,330),(37,325),(203,192,255),4)#手指
cv2.line(img,(40,330),(33,330),(203,192,255),4)#手指
cv2.line(img,(100,430),(100,455),(203,192,255),4)#手指
cv2.line(img,(150,430),(150,455),(203,192,255),4)#手指
cv2.ellipse(img,(108,455),(10,5),180,0,360,(0,0,0),-1)#脚
cv2.ellipse(img,(158,455),(10,5),180,0,360,(0,0,0),-1)#脚
cv2.ellipse(img,(60,400),(8,8),180,180,0,(203,192,255),4)#尾巴
cv2.ellipse(img,(45,398),(8,8),180,180,360,(203,192,255),4)#尾巴
cv2.putText(img,'peppa pig',(400,400),cv2.FONT_HERSHEY_DUPLEX,1,(0,0,0),2)#字体
cv2.imshow('draw',img)
cv2.waitKey(0)

在这里插入图片描述
可以把我们所做的OpenCV简单操作的图片保存成一个文件夹

import cv2
import numpy as np
img=cv2.imread('C:/Users/admin/Desktop/20191027-Pyhton+OpenCV/a/5.jpg')
img1=cv2.resize(img,(400,400))
img2=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
img3=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
img4=cv2.resize(img,(700,700))
img5=cv2.resize(img,None,fx=0.7,fy=0.7)
img6=cv2.flip(img1,1)
img7=cv2.flip(img1,0)
img8=cv2.flip(img1,-1)
img9=np.vstack([img1,img1])
img10=np.hstack([img1,img1])
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/1.jpg',img1)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/2.jpg',img2)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/3.jpg',img3)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/4.jpg',img4)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/5.jpg',img5)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/6.jpg',img6)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/7.jpg',img7)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/8.jpg',img8)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/9.jpg',img9)
cv2.imwrite('C:/Users/admin/Desktop/OpenCV/10.jpg',img10)
cv2.waitKey(0)

在这里插入图片描述
Ending!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章