import cv2 #导入opencv工具包
print(cv2.getVersionString()) #查看opencv版本号
image = cv2.imread("opencv_logo.jpg") #cv2.imread()读取图片,图片可以用绝对定位,但不能用'\',其他的'/'或'//','\\'都可以,也可以用相对定位。
print(image.shape) #shape取维度(250,250,3),这里的250和250是像素的横行和纵列,3是图片的彩色通道
cv2.imshow("image", image) #将图片显示到窗口,第一个参数是窗口名,第二个是要显示的图片,图片瞬间显示并消失。
cv2.waitKey() #会让窗口暂停,在窗口上输入任意键结束。
R:Red
G:Green
B:Blue
存储一张彩色图片等同于存储三张灰度图。
灰度范围是0——255
三颜色通道
OpenCV对颜色的储存顺序是BGR,与常见的RGB顺序刚好相反。
import cv2
image = cv2.imread("opencv_logo.jpg")
#提取三张灰度图
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[10:170, 40:200]
cv2.imshow("crop", crop)
cv2.waitKey()
这里的10:100是横行,指的是从第10行到第100行
同理40:200是纵列,从40列到200列。
import cv2
import numpy as np
#用numpy创建一个画布,300x300的黑色画布
image = np.zeros([300, 300, 3], dtype=np.uint8)
cv2.line(image, (100, 200), (250, 250), (255, 0, 0), 2) #第一个参数是画布,第二个是线的起始点,第三个是线的终点,第四个是线条的颜色,第五个是粗细(像素)
cv2.rectangle(image, (30, 100), (60, 150), (0, 255, 0), 2) #这是一个矩形,第一个是顶点坐标,第二个对角坐标,第三个是颜色,第五个是粗细(像素)
cv2.circle(image, (150, 100), 20, (0, 0, 255), 3) #圆
cv2.putText(image, "hello", (100, 50), 0, 1, (255, 255, 255), 2, 1)
#putText可以绘制字符串,第二个是“内容”
cv2.imshow("image", image),0为字体序号,第一个1是缩放系数,2为粗细2个像素,第二个1是线条类型
cv2.waitKey()
OpenCV绘制的转角细节不够清楚。
均值滤波器用于处理图像的噪点。
import cv2
image = cv2.imread("plane.jpg")
gauss = cv2.GaussianBlur(image, (5, 5), 0) #高斯滤波器,高斯内核为(5,5)
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)
#goodFeaturesToTrack获取图像中的特征点,最多返回500个点,点的质量优于0.1,特征点之间的距离大于10个像素。
corners = cv2.goodFeaturesToTrack(gray, 500, 0.1, 10)
#标记特征点
for corner in corners:
x, y = corner.ravel()
cv2.circle(image, (int(x), int(y)), 3, (255, 0, 255), -1)
cv2.imshow("corners", image)
cv2.waitKey()