OpenCv-python图像处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


OpenCV入门课程

  • OpenCV:轻量、高效、开源。最广泛使用的计算机视觉工具。
  • 课程内容:
    • 图片的读取、RGB彩色通道、区域裁剪、绘制图像和文字;
    • 均值滤波、特征提取、模板匹配、梯度算法;
    • 阈值算法、形态学操作、摄像头的读取。
  • 背景知识:
    • Python基本语法

提示:以下是本篇文章正文内容,下面案例可供参考

一、下载安装OpenCV工具包

win+R打开cmd面板

pip install -i https://pupi.tuna.tsinghua.edu.cn/simple opencv-python

二、利用Pycharm

1.test00_hello.py

图片的读取
代码如下:

import cv2#导入OpenCV库

print(cv2.getVersionString())#打印OpenCV库的版本号 

image = cv2.imread("opencv_logo.jpg ")#OpenCV读取图片文件,存放在image变量中(为一个numpy数据类型)
print(image.shape)#打印image的维度(图片像素的横行,图片像素的纵列,图片三原色彩色通道)

cv2.imshow("image",image)#("窗口名",变量名)
cv2.waitKey()#窗口暂停函数

运行结果:
在这里插入图片描述

2.test02_color.py

RGB彩色通道
代码如下:

import cv2

image = cv2.imread("opencv_logo.jpg")

cv.imshow("blue",image[:,:,0])
cv.imshow("green",image[:,:,1])
cv.imshow("red",image[:,:,2])

gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#彩色图像灰度变换算法,可以把三个彩色通道的图像做平方和加权平均
cv2.imshow("gray",gray)#为BGR三原色的平均

cv.waitKey()

运行结果:
在这里插入图片描述

3.test03_crop.py

区域裁剪
代码如下:

import cv2

image = cv2.imread("opencv_logo.jpg")

crop = image[10:170,40:200]#[横行,纵列]

cv2.imshow("crop",crop)
cv2.waitKey()

运行结果:
在这里插入图片描述

4. test04_draw.py

绘制图像和文字
代码如下:

import cv2
import numpy as np

image = np.zeros([300,300,3],dtype=np.uint8)#用numpy创建黑色画布

cv2.line(image,(100,200),(250,250),(255,0,0),2)#(image,起点坐标,终点坐标,线段颜色,线段粗细(2个像素))
cv2.rectangle(image,(30,100),(60,150),(0,255,0),2)
cv2.circle(image,(150,100),20,(0,0,255),3)#(image,圆心坐标,半径,颜色,粗细)
cv2.putText(image,"hello",(100,150),0,1,(255,255,255),2,1)

cv2.imshow("image",image)
cv2.waitKey()

运行结果:
在这里插入图片描述

5.test05_blur.py

均值滤波
代码如下:

import cv2

image = cv2.imread("plane.jpg")

gauss = cv2.GaussianBlur(image,(5,5),0)#高斯滤波器
median = cv2.medianBlur(image,5)#中值滤波器

cv2.imshow("image",image)
cv2.imshow("image",gauss)
cv2.imshow("image",median)

cv2.waitKey()

运行结果:
在这里插入图片描述

6.test06_corner.py

特征提取
代码如下:

import cv2

image = cv2.imread("opencv_loge.jpg")
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

corners = cv2.goodFeaturesToTrack(gray,500,0.1,10)#利用函数获取图像中的特征点(500——最多返回500个特征点,0.1——质量优于0.1,10——特征点之间的距离大于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()

运行结果:
在这里插入图片描述

7.test07_match.py

模板匹配
代码如下:

import cv2
import numpy as np

image = cv2.imread("poker.jpg")
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

template = gray[75:105,235:265]#选取图像区域作为匹配模板,使用索引gray[横行,纵列],刚好包含一个菱形

match = cv2.matchTemplate(gray,template,cv2.TM_CCOEFF_NORMED)#利用函数存入待检测图像gray和模板template,使用标准匹配相关算法
locations = np.where(match >= 0.9)#找出匹配系数大于0.9的匹配点

w,h = template.shape[0:2]#求出模板图案的长和宽
for p in zip(*locations[::-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("image",image)
cv2.waitKey()

运行结果:
在这里插入图片描述

8.test08_gradient.py

梯度算法


import cv2

gray = cv2.imread("opencv_logo.jpg", cv2.IMREAD_GRAYSCALE)

laplacian = cv2.Laplacian(gray, cv2.CV_64F)#拉普拉斯算子,大致对应了图像的二阶导数
canny = cv2.Canny(gray, 100, 200)#canny边缘监测,使用梯度区间定义边缘
cv2.imshow("gray", gray)
cv2.imshow("laplacian", laplacian)
cv2.imshow("canny", canny)

cv2.waitKey()


运行结果:
在这里插入图片描述

9.test09_threshold.py

阈值算法
代码如下:


import cv2

gray = cv2.imread("bookpage.jpg", cv2.IMREAD_GRAYSCALE)
ret, binary = cv2.threshold(gray, 10, 255, cv2.THRESH_BINARY)#定义固定阈值

binary_adaptive = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY, 115, 1)#自适应阈值算法
    
ret1, binary_otsu = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)#常用的阈值算法,自动计算恰当的阈值

cv2.imshow("gray", gray)
cv2.imshow("binary", binary)
cv2.imshow("adaptive", binary_adaptive)
cv2.imshow("otsu", binary_otsu)

cv2.waitKey()


运行结果:
在这里插入图片描述

10.test10_morphology.py

形态学操作
代码如下:


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)#做阈值处理,使用反向阈值
kernel = np.ones((5, 5), np.uint8)#5*5像素的正方形

erosion = cv2.erode(binary, kernel)#腐蚀binary图像
dilation = cv2.dilate(binary, kernel)#膨胀binary图像

cv2.imshow("binary", binary)
cv2.imshow("erosion", erosion)
cv2.imshow("dilation", dilation)


cv2.waitKey()

腐蚀和膨胀对于清理图像边缘细节很有帮助,如果交替是使用腐蚀和膨胀可以获得更多的形态变化,比如封闭或打开图案中的空腔
运行结果:
在这里插入图片描述

11.test11_camera.py

摄像头的读取
代码如下:


import cv2

capture = cv2.VideoCapture(0)#读取设备摄像头

while True:
    ret, frame = capture.read()#读取摄像头画面
    cv2.imshow("camera", frame)
    key = cv2.waitKey(1)
    if key != -1:
        break

capture.release()#释放指针


运行结果:
在这里插入图片描述

附件:图片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值