零蚀
我将要学的内容是基于opencv框架实现的,幸运的是Android部分现在也在更新Opencv,虽然生活工作中最近都比较忙,但是心情很愉悦。
我们这前段的基础部分围绕着opencv基础展开的,前期总体可以分为两部分,一个是对图片的处理,主要是对色值,亮度,滤波等图像色彩的简单处理,第二个是对图像的识别,这部分都是依靠算法来实现的,比如物体识别,边缘识别,图片修复等操作。大体上可以算photoShop的高级模式。
代码模式:前期会使用python来进行编程学习,后面会使用C++来重新实现这些逻辑。
# 安装pip
sudo apt-get update
sudo apt install python-pip
# 安装 python3
sudo apt-get install python3.6
sudo apt-get install python3-pip
# 安装conda (conda文件在百度网盘)
sh Anaconda3-5.3.0-Linux-x86_64.sh
sudo rm -rf /usr/local/anaconda3
rm -rf ~/.condarc ~/.conda ~/.continuum
export PATH=/usr/local/anconda3/bin:$PATH
source ~/.bashrc
conda // 检测是否安装成功
# 创建python3虚拟环境的
conda create -n opencvtestone python=3
# 检查是否创建了环境
$ conda env list
base * /home/parallels/anaconda3
opencvtestone /home/parallels/anaconda3/envs/opencvtestone
# $ conda activate opencvtestone 开启环境
# $ conda deactivate 结束环境
# 使用自己创建的环境
$ conda activate opencvtestone
(opencvtestone) parallels@zero-ubuntu:~$ # 可以看到环境已经发生变化
# 查看opencv所有的版本
$ pip install opencv-python==111111111fadsfdsa(任意数)
ERROR: Could not find a version that satisfies the requirement opencv-python==111111111fadsfdsa
(from versions: 3.4.8.29, 3.4.9.31, 3.4.9.33, 3.4.10.35, 3.4.10.37, 3.4.11.39, 3.4.11.41, 4.1.2.30, 4.2.0.32, 4.2.0.34, 4.3.0.36, 4.3.0.38, 4.4.0.40, 4.4.0.42)
# 工业场景一般会使用稳定版本,3.4版本
$ pip install opencv-python==3.4.9.33(这个网速比较快)
# 测试
>>> import cv2
>>> cv2.__version__
'3.4.9'
读取图片并显示,代码如下。这里的mat是一个读取到的矩阵,里面的元素就是RGB元素,这个和android中的mat一样都是储存相片信息的一个容器。和Android版一样都是通过imread来读取本地的数据。
这里的imshow是展示一个小窗口,然后waitKey是等待用户按键,返回值是按键的ASCII码,参数delay是等待时间,0表示一直等待。
import cv2 as cv
mat = cv.imread("../source/android.png")
cv.imshow("window", mat)
cv.waitKey(0)
# 原样读取
mat = cv.imread("../source/android.png",cv.IMREAD_UNCHANGED)
# 彩色读取
mat = cv.imread("../source/android.png",cv.IMREAD_COLOR)
# 灰度读取
mat = cv.imread("../source/android.png",cv.IMREAD_GRAYSCALE)
# 写入路径 mat矩阵
cv.imwrite("../source/an.png",mat)
import cv2 as cv
zeroMat = cv.imread("../source/android.png", cv.IMREAD_COLOR)
for row in range(200):
for cols in range(200):
b = 255-zeroMat[cols, row][0]
g = 255-zeroMat[cols, row][1]
r = 255-zeroMat[cols, row][2]
zeroMat[cols, row] = [b, g, r]
cv.imshow("draw", zeroMat)
cv.waitKey(0)
import cv2 as cv
import numpy as np
zeroMat = np.zeros((200, 200, 3), np.uint8)
for row in range(200):
zeroMat[100, row] = [255, 255, 255]
cv.imshow("draw", zeroMat)
cv.waitKey(0)
import cv2 as cv
import numpy as np
src = cv.imread("../source/android.png", cv.IMREAD_COLOR)
dst = np.zeros((100, 100, 3), np.uint8)
height = dst.shape[0]
width = dst.shape[1]
dst = src[0:height, 0:width]
cv.imshow("draw", dst)
cv.waitKey(0)
print(src.shape) # (200, 200, 3)
print(src.dtype) # uint8 颜色数值0-255 所以是uint8
前言
机器人视觉篇
NO.2 机器视觉 几何变化 & 特效处理
NO.3 机器视觉 直方图 & 帧提取
NO.4 机器视觉 人脸识别&色彩过滤
NO.5 机器人视觉 二值化 & 卷积
NO.6 机器人视觉 霍夫检测 & 边缘查找
NO.7 C++中使用Opencv
NO.8 C++ 直方图 & 卷积
NO.9 C++ 匹配 & 变化
NO.10 C++ 图像算法