1.Pycharm配置opencv环境,3.4.1.15版本
2.了解库函数
import cv2
import numpy
#读取图像文件并打印
image = cv2.imread("opencv_logo.jpg")#读取文件中的图像
print(image.shape)#打印图像的长宽,和通道数
cv2.imshow("image",image)#打印图像
cv2.waitKey()#等待按键,防止图片一闪而过
import cv2
import numpy
#图像的彩色通道
image = cv2.imread("opencv_logo.jpg")
#提取bgr三张灰度图
cv2.imshow("blue", image[:, :, 0])
cv2.imshow("green", image[:, :, 1])
cv2.imshow("red", image[:, :, 2])
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#彩图转灰度
cv2.imshow("gray", gray)
cv2.waitKey()
import cv2
image = cv2.imread("opencv_logo.jpg")
#切割图像
crop = image[20:170, 40:210]#剪切竖列20-170,横行40-210
cv2.imshow("crop", crop)
cv2.waitKey()
import cv2
import numpy as np
image = np.zeros([300, 300, 3], dtype=np.uint8)#灰度数值类型——8位无符号整数
#画各种图
cv2.line(image, (100, 200), (200, 300), [255, 0, 0], 2)
cv2.rectangle(image, (100, 200), (200, 300), [255, 0, 0], 2)
cv2.circle(image, (150, 150), 50, [0, 0, 255], 2)
cv2.putText(image,"Hello", (100, 50), 0, 1, [255,255,255], 2, 1)
cv2.imshow("image",image)
cv2.waitKey()
import cv2
#滤波
image = cv2.imread("plane.jpg")
gauss = cv2.GaussianBlur(image, (5, 5), 0)#参数:源,卷积核大小,sigmaX(为零,即视内核大小决定)
median = cv2.medianBlur(image, 5)#内核为五个像素
cv2.imshow("image", image)
cv2.imshow("gauss", gauss)#效果:噪点减少,细节丢失
cv2.imshow("median", median)#效果:噪点更少
cv2.waitKey()
import cv2
#提取转角特征
image = cv2.imread("opencv_logo.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
corners = cv2.goodFeaturesToTrack(gray, 500, 0.1, 10)#获取图像中的特征点,最多500个,质量优于0.1, 之间距离大于10像素
for corner in corners:
x, y = corner.ravel()
cv2.circle(image,(x,y), 3, (255, 0, 0), -1)
cv2.imshow("corners", image)
cv2.waitKey()
上强度
import cv2
import numpy as np
# 模板匹配菱形
# 无法匹配大小不同的图像
image = cv2.imread("poker.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
template = gray[70:105, 235:265] # 选取区域作为模板
match = cv2.matchTemplate(gray, template, cv2.TM_CCOEFF_NORMED) # 选用标准相关匹配算法
# 将待检测图像和模板都标准化,再计算匹配度,保证不受光照等因素影响
location = np.where(match >= 0.9)
w, h = template.shape[0:2]
for p in zip(*location[::-1]): # 不太理解
x1, y1 = p[0], p[1]
x2, y2 = x1 + w, y1 + h
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imshow("template", template)
cv2.imshow("image", image)
cv2.waitKey()
import cv2
import numpy as np
# 梯度算法
gray = cv2.imread("opencv_logo.jpg", cv2.IMREAD_GRAYSCALE) # 直接读灰度图
laplacian = cv2.Laplacian(gray, cv2.CV_64F) # 拉普拉斯算子
canny = cv2.Canny(gray, 50, 100) # canny算法
cv2.imshow("gray", gray)
cv2.imshow("laplacian", laplacian) # 图像明暗变化处变为黑色
cv2.imshow("canny", canny) # 完美的边缘 “斯巴拉西”
cv2.waitKey()
import cv2
import numpy as np
# 对图像进行腐蚀和膨胀
gray = cv2.imread("opencv_logo.jpg", cv2.IMREAD_GRAYSCALE)
_, binary = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY_INV) # 图像二值化
kernal = np.ones((5, 5), np.uint8) # 五成五像素的正方形
erosion = cv2.erode(binary, kernal) # 腐蚀
dilation = cv2.dilate(binary, kernal) # 膨胀
cv2.imshow("binary", binary)
cv2.imshow("erosion", erosion)
cv2.imshow("dilation", dilation)
cv2.waitKey()