OpenCV 机器视觉入门精选 100 题(附 Python 代码)

重磅干货,第一时间送达

如今深度学习的快速发展给计算机视觉注入了前所未有的新活力!其中在计算机图形学和计算机视觉里面最流行的一个库就是 OpenCV。OpenCV 在自动驾驶和仿生机器人当中的应用非常广泛。

而在 2018 年 11 月份,OpenCV 通过 GITHUB 正式发布了 OpenCV 又一个重要里程碑版本 OpenCV 4.0。

今天给大家推荐一个干货满满的 GitHub 项目。该项目包含了 CV 领域,OpenCV 图像处理入门 100 题实例解析,并配备完整的 Pyhon 代码。

项目地址:

https://github.com/yoyoyo-yo/Gasyori100knock

极简安装:

作者推荐了 OpenCV 的极简安装方法:

1. 安装 MiniConda

地址:https://conda.io/miniconda.html

2. 创建虚拟环境并激活

$ conda create python = 3.6  -  n gasyori 100
$ source actiavte gasyori 100

3. 安装包

$ pip install -r requirement.txt

其中,requirement.txt 文件在项目根目录下,下载至命令行所在目录直接运行上述命令即可。

100 题实例:

作者写的 OpenCV 100 题按照从简单到复杂逐一解析,非常适合我们的学习路径。

例如 Q1-10:

我们首先来看一个简单的例子。

Q1. 读取图像并按 BGR 顺序更改 RGB

import cv2

# Read image
img = cv2.imread('imori.jpg')
b = img[:, :, 0].copy()
g = img[:, :, 1].copy()
r = img[:, :, 2].copy()

# RGB > BGR
img[:, :, 0] = r
img[:, :, 1] = g
img[:, :, 2] = b

# Save result
cv2.imwrite('out.jpg', img)
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

例如 Q41-50:

我们来看一个稍微复杂的例子。

Q41. Canny边缘检测(步骤1)边缘强度

import cv2import numpy as npimport matplotlib.pyplot as plt

# Read imageimg = cv2.imread('imori.jpg').astype(np.float32)H, W, C = img.shape

# Graygray = 0.2126 * img[..., 2] + 0.7152 * img[..., 1] + 0.0722 * img[..., 0]

# Gaussian FilterK_size = 5sigma = 1.4

## Zero paddingpad = K_size // 2gau = np.zeros((H + pad*2, W + pad*2), dtype=np.float32)#gau[pad:pad+H, pad:pad+W] = gray.copy().astype(np.float32)gau = np.pad(gray, (pad, pad), 'edge')tmp = gau.copy()

## KernelK = np.zeros((K_size, K_size), dtype=np.float32)for x in range(-pad, -pad+K_size):    for y in range(-pad, -pad+K_size):        K[y+pad, x+pad] = np.exp( -(x**2 + y**2) / (2* (sigma**2)))K /= (sigma * np.sqrt(2 * np.pi))K /= K.sum()

for y in range(H):    for x in range(W):        gau[pad+y, pad+x] = np.sum(K * tmp[y:y+K_size, x:x+K_size])

## Sobel verticalKSV = np.array(((-1., -2., -1.), (0., 0., 0.), (1., 2., 1.)), dtype=np.float32)## Sobel horizontalKSH = np.array(((-1., 0., 1.), (-2., 0., 2.), (-1., 0., 1.)), dtype=np.float32)

gau = gau[pad-1:H+pad+1, pad-1:W+pad+1]fy = np.zeros_like(gau, dtype=np.float32)fx = np.zeros_like(gau, dtype=np.float32)K_size = 3pad = K_size // 2

for y in range(H):    for x in range(W):        fy[pad+y, pad+x] = np.sum(KSV * gau[y:y+K_size, x:x+K_size])        fx[pad+y, pad+x] = np.sum(KSH * gau[y:y+K_size, x:x+K_size])

fx = fx[pad:pad+H, pad:pad+W]fy = fy[pad:pad+H, pad:pad+W]

# Non-maximum suppressionedge = np.sqrt(np.power(fx, 2) + np.power(fy, 2))fx[fx == 0] = 1e-5tan = np.arctan(fy / fx)## Angle quantizationangle = np.zeros_like(tan, dtype=np.uint8)angle[np.where((tan > -0.4142) & (tan <= 0.4142))] = 0angle[np.where((tan > 0.4142) & (tan < 2.4142))] = 45angle[np.where((tan >= 2.4142) | (tan <= -2.4142))] = 95angle[np.where((tan > -2.4142) & (tan <= -0.4142))] = 135

out = angle.astype(np.uint8)

# Save resultcv2.imwrite('out.jpg', out)cv2.imshow('result', out)cv2.waitKey(0)cv2.destroyAllWindows()

项目特色:

该项目最大的特色就是 100 题循序渐进,基本涵盖了 OpenCV 的关键知识点,目前已经更新了前 60 题,后续的会陆续发布。

唯一的缺点是项目语言是日语,稍有不便。但是问题不大,笔者推荐一个方法,可以使用谷歌浏览器自动翻译网页即可。而且,所有的代码都是英文的,不妨碍理解。

如果你正在入门 CV,正在学习 OpenCV,那么这个项目将会是一个不错的从入门到进阶的教程。上手代码,亲自跑一跑结果,希望对大家有所帮助!

(0)

相关推荐

  • OpenCV实战(1)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 最近 ...

  • python+opencv图像处理(六)

    图像相加 两幅图像是可以加在一起的. 图像相加是通过对两幅大小相同的图像对应位置像素的相加运算,以产生一幅新的含有两幅图像信息的图像的方法.有时也称为图像合成. 1.(+)法 数学运算中的+可以用于图 ...

  • 使用OpenCV校准鱼眼镜头

    重磅干货,第一时间送达 01.简介 当我们使用的鱼眼镜头视角大于160°时,OpenCV中用于校准镜头"经典"方法的效果可能就不是和理想了.即使我们仔细遵循OpenCV文档中的步骤 ...

  • 图像旋转90/180 opencv坐标系

    问题描述: 图像旋转90.180.270等 使用类似下面的代码,会有黑边,图像变形之类的问题 其实windows系统自带类似的功能,但是我需要批量处理图像,因此尝试自己写 算法基础: 这种直角的旋转, ...

  • 基于OpenCV的手掌检测和手指计数

    重磅干货,第一时间送达 利用余弦定理使用OpenCV-Python实现手指计数与手掌检测. 手检测和手指计数 接下来让我们一起探索以下这个功能是如何实现的. OpenCV OpenCV(开源计算机视觉 ...

  • 基于OpenCV的实战:轮廓检测(附代码解析)

    重磅干货,第一时间送达 利用轮廓检测物体可以看到物体的各种颜色,在这种情况下放置在静态和动态物体上.如果是统计图像,则需要将图像加载到程序中,然后使用OpenCV库,以便跟踪对象. 每当在框架中检测到 ...

  • python+opencv图像处理(十二)

    图像仿射变换和透视变换 天晴了...... 1.仿射变换 图像的仿射变换就是图像的旋转加上拉升,说直白点,就是把矩形变成平行四边形. 要把矩形变成平行四边行,只需要拉伸其四个角点就行了,事实上,只需要 ...

  • python+opencv图像处理(十一)

    图像镜像 图像的镜像指的是将图像以某条线为中心进行镜像对换. 图像的镜像根据翻转的方向可分为水平镜像翻转.垂直镜像翻转和对角镜像翻转3种. 水平镜像翻转指的是将图像以y轴为中心进行左右镜像对换. 垂直 ...

  • OpenCV-Python鼠标绘制矩形框和像素归一化

    重磅干货,第一时间送达 鼠标绘制矩形框 之前有说到使用opencv绘制几何图形,但那些都是固定地给出坐标绘制固定位置的形状.有时需要鼠标在任何位置绘制几何形状,下面就来看看如何使用鼠标响应函数在图像的 ...

  • python+opencv图像处理(十)

    图像旋转 本篇主要利用opencv的转换函数warpAffine实现图像的平移和旋转. 1.图像旋转 图像旋转即是根据某个中心点进行旋转. 要进行旋转,要找到中心点,要知道旋转角度,opencv提供了 ...

  • 基于OpenCV的条形码区域分割

    重磅干货,第一时间送达 本期,我们将一起学习如何从图像中提取出含有条形码的区域.下面的代码,我们将在Anaconda中采用Python 2.7 完成,当然OpenCV中的图像处理库也是必不可少的. 分 ...

  • 基于OpenCV实战:对象跟踪

    重磅干货,第一时间送达 介绍 跟踪对象的基本思想是找到对象的轮廓,基于HSV颜色值. 轮廓:突出显示对象的图像片段.例如,如果将二进制阈值应用于具有(180,255)的图像,则大于180的像素将以白色 ...

  • 基于OpenCV的实用图像处理操作

    重磅干货,第一时间送达 图像处理适用于图像和视频.良好的图像处理结果会为后续的进一步处理带来很大的帮助,例如提取到图像中的直线有助于对图像中物体的结构进行分析,良好的特征提取会优化深度学习的结果等.今 ...

  • 使用OpenCV校准鱼眼镜头-第2部分

    重磅干货,第一时间送达 在昨天的文章中我们介绍了有关如何使用OpenCV校准鱼眼镜头的一些基础知识,并我们在最后留下了一个问题.那么今天我们就来看看这个问题该如何解决. 但是,如果大家遇到以下任何一种 ...