openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像

简介: openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像

第3章 使用OpenCV 3处理图像

3.1 不同彩色空间的转换

当前计算机视觉中有三种常用的色彩空间:灰度、BGR以及HSV

灰度:去除彩色信息,变成灰阶。灰度色彩对中间处理特别有效,如人脸检测。

BGR,即蓝-绿-红色彩空间,每一个像素点用一个三元数组(B,G,R)表示。

HSV,H(Hue)是色调,S(Saturation)是饱和度,V(Value)表示黑暗的程度。

3.2 傅里叶变换

一切波形都可以由一系列正弦曲线叠加得到。

 

3.2.1 高通滤波器(HPF)

检测图像某个区域,根据像素和周围像素的亮度差值来提升该像素亮度的滤波器。

核(Kernel),滤波器矩阵

核是一组权重的集合,它会与应用在原图像的每一个区域,由此生成目标区域的一个像素。

在计算中央像素和周围像素的亮度差值之和后,如果亮度变化变化很大。中央像素的亮度会增加。

这在边缘检测上尤其有效,它采用一种称为高频提升滤波器的高通滤波器。

 

3.2.2 低通滤波器(LPF)

像素和周围像素亮度差值小于一个特定值时,平滑该像素的亮度,用于去燥和模糊化。

3.3 创建模块

为了滤波器能够重用。

创建模块filter.py

utils.py

 

3.4边缘检测 ~3.6 修改应用

~~

书中代码不全。

3.7 Canny边缘检测

import cv2

import numpy as np
img = cv2.imread(
"statue_small.jpg",0)

cv2.imwrite("canny.jpg",cv2.Canny(img,200,300))
cv2.imshow(
"statue_small.jpg",cv2.imread("statue_small.jpg"))cv2.imshow("canny",cv2.imread("canny.jpg"))

cv2.waitKey()

cv2.destroyAllWindows()


3.8 轮廓检测

import cv2

import numpy as np

img = np.zeros((200,200),dtype=np.uint8)

img[50:150, 50:150] = 255

ret , thresh = cv2.threshold(img,127,255,0)

img,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

color = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

img = cv2.drawContours(color,contours,-1,(0,255,0),2)

cv2.imshow("contours",color)

cv2.waitKey()

cv2.destroyAllWindows()


3.9 边界框、最小矩形区域和最小闭圆的轮廓

import cv2

import numpy as np



img = cv2.pyrDown(cv2.imread("hammer.jpg",cv2.IMREAD_UNCHANGED))



ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(),

               cv2.COLOR_BGR2GRAY),127,255,cv2.THRESH_BINARY)

image,contours,hier = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

for c in contours:

   x,y,w,h = cv2.boundingRect(c)

   cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

   rect = cv2.minAreaRect(c)

   box = cv2.boxPoints(rect)

   box = np.int0(box)

   cv2.drawContours(img,[box],0,(0,0,255),3)

   (x,y),radius = cv2.minEnclosingCircle(c)

   center = (int(x),int(y))

   radius = int(radius)

   img = cv2.circle(img,center,radius,(0,255,0),2)

cv2.drawContours(img,contours,-1,(255,0,0),1)

cv2.imshow("contours",img)

cv2.waitKey()

cv2.destroyAllWindows()

3.10凸轮廓与Douglas-peucker算法 *并没有看懂,有种书缺页的感觉。

凸边形内部任意两点连续都在其内部。

cv2.approxPloyDP是一个OpenCV函数,它用来计算近似的多边形框。

有3个参数:

1,轮廓

2.ε

,最大差值(越小则越近似)近似多边形周长与实际周长之间的最大差值。

3.布尔标记,表示多边形是否闭合。

轮廓的周长arcLength(cnt,True)通常作为ε

的参考值。

为了计算凸形状,需要用OpenCV的cv2.convexHull函数来获取处理过的轮廓信息,

hull = cv2.convexHull(cnt)


3.11 直线和圆检测

Hough变换是直线和和形状检测背后的理论基础。

下面是OpenCV中hough变换的函数。

3.11.1 直线检测

HoughLines和HoughLinesP

区别在于第一个函数是标准Hough变换,第二个函数使用概率Hough变换(P即概率)

3.11.2 圆检测

HoughCircles函数可用来检测圆,与HoughLines类似,

3.12 检测其他形状

approxPloyDP提供多边形的近似。

结合cv2.findCoutours函数和cv2.approxDP函数就可以检测多边形。


相关文章
|
2月前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
4117 3
|
2月前
|
机器学习/深度学习 监控 算法
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
54 3
|
2月前
|
计算机视觉
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
在使用OpenCV的cv2模块保存带有中文命名的图片时,直接使用cv2.imwrite()会导致乱码问题,可以通过改用cv2.imencode()方法来解决。
149 0
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
|
20天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
45 3
|
2月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
165 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
2月前
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
65 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
2月前
|
Ubuntu Linux C语言
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
本文介绍了在Ubuntu 18.04系统上编译安装OpenCV 3.4.0及其扩展包opencv_contrib 3.4.0的详细步骤,包括下载源码、安装依赖、配置CMake和编译安装,以及常见问题的解决方法。
132 1
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
|
2月前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
23 3
|
2月前
|
缓存 监控 计算机视觉
视频监控笔记(三):opencv结合ffmpeg获取rtsp摄像头相关信息
本文介绍了如何使用OpenCV结合FFmpeg获取RTSP摄像头信息,包括网络架构、视频监控系统组成、以及如何读取和显示网络摄像头视频流。
48 1
|
2月前
|
Serverless 计算机视觉
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
这篇文章介绍了如何使用OpenCV库通过mask图像绘制分割对象的外接椭圆。首先,需要加载mask图像,然后使用`cv2.findContours()`寻找轮廓,接着用`cv2.fitEllipse()`拟合外接椭圆,最后用`cv2.ellipse()`绘制椭圆。文章提供了详细的代码示例,展示了从读取图像到显示结果的完整过程。
58 0
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆