三小时精通OpenCV(一)
(1)改变图片大小
#导入包
import cv2
import numpy as np
#读入图片
img=cv2.imread("D:/zh/Pictures/Saved Pictures/2.jpg")
#打印图片大小
print(img.shape)
#改变图像的大小 先宽 后高
imgResize=cv2.resize(img,(300,200))
#图像剪裁 先高,后宽
imgCropped=img[0:200,200:500]
#打印改变后的图像大小
print(imgResize.shape)
print(imgCropped.shape)
#显示原图、改变大小后的图,剪裁的图
cv2.imshow("Image",img)
cv2.imshow("Image Resize",imgResize)
cv2.imshow("Image Cropped",imgCropped)
#设置窗口显示时间,为0时窗口无限显示
cv2.waitKey(0)
(2)图片处理
import cv2
import numpy as np
kernel=np.ones((5,5),np.uint8)
img=cv2.imread("D:/zh/Pictures/Saved Pictures/2.jpg")
#转化为灰度图
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#模糊图像
imgBlur=cv2.GaussianBlur(imgGray,(7,7),0)
#边缘检测
imgCanny=cv2.Canny(img,150,200)
#图像膨胀
imgDialation=cv2.dilate(imgCanny,kernel,iterations=1)
#图像腐蚀
imgEroded=cv2.erode(imgDialation,kernel,iterations=1)
#显示图片
cv2.imshow("Image",img)
cv2.imshow("Gray Image",imgGray)
cv2.imshow("Blur Image",imgBlur)
cv2.imshow("Canny Image",imgCanny)
cv2.imshow("Dialation Image",imgDialation)
cv2.imshow("Eroded Image",imgEroded)
cv2.waitKey(0)
(3)绘图
import cv2
import numpy as np
#初始化一个只有宽和高的灰度图
img=np.zeros((512,512))
print(img.shape)
cv2.imshow("Image",img)
#给图片上色 设置三个通道
img1=np.zeros((512,512,3),np.uint8)
#图片整体上色
img1[:]=255,0,0
cv2.imshow("Image1",img1)
#图片部分上色
img2=np.zeros((512,512,3),np.uint8)
img2[200:300,100:300]=255,0,0
cv2.imshow("Image2",img2)
#在图像上画线
img3=np.zeros((512,512,3),np.uint8)
#线不到头:图像 起点 终点 颜色 厚度
cv2.line(img3,(0,0),(200,300),(0,255,0),3)
#线到头:图像 起点 终点 颜色 厚度
cv2.line(img3,(0,0),(img3.shape[1],img3.shape[0]),(255,255,0),3)
#矩形
cv2.rectangle(img3,(0,0),(250,350),(0,0,255),2)
#矩形填充
cv2.rectangle(img3,(0,0),(100,150),(29,56,34),cv2.FILLED)
#圆形 图像 圆心 半径 颜色 厚度
cv2.circle(img3,(450,50),30,(255,255,0),5)
#图像上放置文本 图片 内容 起点 字体 大小 颜色 厚度
cv2.putText(img3,"OPENCV",(300,200),cv2.FONT_HERSHEY_COMPLEX,1,(0,150,0),1)
cv2.imshow("Image3",img3)
cv2.waitKey(0)
(4)透视变换
import cv2
import numpy as np
img = cv2.imread("E:/graduatedata/code/OpencvPython/Resources/3.jpg")
width,height=250,350
#原图片中需要进行透视变换的四个点的位置(用画板打开图片获取四个点的值)
pts1=np.float32([[732,183],[1105,267],[616,677],[1030,790]])
#变换后四个点的位置
pts2=np.float32([[0,0],[width,0],[0,height],[width,height]])
#得到透视变换矩阵
matrix=cv2.getPerspectiveTransform(pts1,pts2)
#进行透视变换
imgOutput=cv2.warpPerspective(img,matrix,(width,height))
cv2.imshow("Image",img)
cv2.imshow("Output",imgOutput)
cv2.waitKey(0)
这里要注意,如果在原始图片读入后调用resize函数修改了图像大小,则通过画板所获取到的原图中的四个点位置信息将不再适用于resize后的图
(5)图片拼接
import cv2
import numpy as np
img=cv2.imread("E:/graduatedata/code/OpencvPython/Resources/3.jpg")
imgResize=cv2.resize(img,(300,200))
#图片拼接 水平方向和竖直方向
imgHor=np.hstack((imgResize,imgResize))
imgVer=np.vstack((imgResize,imgResize))
cv2.imshow("Horizontal",imgHor)
cv2.imshow("Vertical",imgVer)
cv2.waitKey(0)