- 图像的输入、输出
- 获取图像基本信息
- 像素取反
- 色彩空间转换
- 捕捉视频中的颜色物块
- 通道的分离与合并
- 算术运算
- 逻辑运算
- 调整图像亮度、对比度
- 泛洪填充
- 模糊操作
- 高斯噪声、高斯模糊
- 边缘保留滤波(EPF)
- 像素直方图
- 像素直方图应用
- 直方图反向投影(定位)
- 模板匹配
- 图像二值化
- 图像金字塔
- 图像梯度
- Canny边缘提取
- 直线检测
- 提取水平、竖直线
- 圆检测
- 轮廓发现
- 对象测量
- 膨胀、腐蚀
- 开闭操作
- 其他形态学操作
- 分水岭算法(图像分割)
- 人脸检测
- 数字验证码识别
01、输入、输出
读取图像
src = cv.imread("E:/opencv/OPENCV_3.1/opencv/sources/samples/data/test.jpg")
显示图像
cv.imshow("input image", src)
保存图像
cv.imwrite("C:/Users/ASUS/Desktop/test1.jpg", gray)
从摄像头读进视频
def video_demo(): # opencv 读进来的视频无声音
capture = cv.VideoCapture(0) # 第0个摄像头
while True:
ret, frame = capture.read()
frame = cv.flip(frame, 1) # 1上下颠倒 0左右颠倒 -1都颠倒
cv.imshow("video", frame)
c = cv.waitKey(50)
if c == 27:
break
02、获取图像基本信息
def get_image_info(image):
print(type(image))
print(image.shape)
print(image.size)
print(image.dtype)
pixel_data = np.array(image)
print(pixel_data)
03、像素取反
# 自己写的方法
def access_pixels(image):
print(image.shape)
height = image.shape[0]
width = image.shape[1]
channels = image.shape[2]
print("width: %s, height: %s, channels: %s" % (width, height, channels))
for row in range(height):
for col in range(width):
for c in range(channels):
pv = image[row, col, c]
image[row, col, c] = 255 - pv
cv.imshow("pixels_demo", image)
# opencv 的API
def inverse(img):
dst = cv.bitwise_not(img)
cv.imshow("inverse_demo", dst)
04、色彩空间转换
def color_space_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
cv.imshow("gray", gray)
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
cv.imshow("hsv", hsv)
yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)
cv.imshow("yuv", yuv)
ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)
cv.imshow("ycrcb", ycrcb)
05、捕捉视频中的颜色物块
def extrace_object_demo():
capture = cv.VideoCapture("E:/opencv/OPENCV_3.1/opencv/sources/samples/data/1.mp4")
while True:
ret, frame = capture.read()
if not ret:
break
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
lower_hsv = np.array([0, 43, 46])
upper_hsv = np.array([10, 255, 255])
mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)
dst = cv.bitwise_and(frame, frame, mask=mask)
cv.imshow("dst", dst)
cv.imshow("video", frame)
cv.imshow("mask", mask)
c = cv.waitKey(40)
if c == 27:
break
06、通道的分离与合并
src = cv.imread("E:/opencv/OPENCV_3.1/opencv/sources/samples/data/mua.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
b, g, r = cv.split(src) # 分离
cv.imshow("blue", b)
cv.imshow("green", g)
cv.imshow("red", r)
src[:, :, 2] = 0
src1 = cv.merge([b, g, r]) # 合并
cv.imshow("changed image", src)
cv.imshow("changed image1", src1)
07、算术运算
加
def add_demo(m1, m2):
dst = cv.add(m1, m2)
cv.imshow("add_demo", dst)
减
def subtract_demo(m1, m2):
dst = cv.subtract(m1, m2)
cv.imshow("subtract_demo", dst)
除
def divide_demo(m1, m2):
dst = cv.divide(m1, m2)
cv.imshow("divide_demo", dst)
乘
def multiply_demo(m1, m2):
dst = cv.multiply(m1, m2)
cv.imshow("multiply_demo", dst)
均值、方差
def others(m1, m2):
M1, dev1 = cv.meanStdDev(m1)
M2, dev2 = cv.meanStdDev(m2)
print(M1)
print(M2)
print(dev1)
print(dev2)
08、逻辑运算
def logic_demo(m1, m2):
# dst = cv.bitwise_and(m1, m2) #