单独使用OpenCV的时候遇到了之前因为安装 ROS 而导致的一些坑点。

故记录下来。

问题描述

使用了 Anaconda 的虚拟环境,并且确认已经安装过 OpenCV

运行 Python,直接 xxx(不可描述)。

1
2
3
4
Traceback (most recent call last):
File "/home/askeynil/Desktop/cv/class/1. demo.py", line 1, in <module>
import cv2 as cv
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
阅读全文

哈里斯角点检测

克里斯·哈里斯(Chris Harris)和迈克·史蒂芬斯(Mike Stephens)在1988年的论文《组合式拐角和边缘检测器》(《A Combined Corner and Edge Detector》)中做了一次找到这些拐角的尝试,所以现在将其称为哈里斯拐角检测器。这篇论文把这个简单的想法变成了数学形式。它基本上找到了在所有方向上位移的强度差异。

官方api解释直达

1
cornerHarris(src, dst, blockSize, ksize, k)
  1. src:必须是单通道灰度图
  2. dst:返回类型是CV_32FC1,大小与 src 相同。
  3. blockSize:角点检测考虑的领域大小,int类型
  4. kszie:Sobel算子的大小,int类型
  5. k:自由度参数,值越小检测出的结果越多。double类型
阅读全文

官方例程:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_watershed/py_watershed.html?highlight=coins

简单描述

coins

  1. 获取需要分割的图片
  2. 转化为灰度图
  3. 转化为二值图
  4. 转化为距离图
  5. 分离距离图,转化为二值图
  6. 查找距离二值图的轮廓
  7. 给二值图轮廓中的每个点进行颜色标记,从1开始标记
  8. 将标记的图转化为固定类型的标记图(CV_32S类型)
  9. 在标记图中将二值图黑色的区域对应的位置设置标记为轮廓的数量加1。(非常重要,后面介绍)
  10. 使用分水岭算法将标记的图和原图关联起来。
  11. 给标记图中每块标记区域上色
阅读全文

以下只列举常用的方法和常用的参数,例如枚举,只会将最常用的几个列举出来,详细的请参考官方文档。

对于C++默认使用了using namespace cv;

对于Python默认使用了import cv2 as cvimport numpy as np

OpenCV版本:3.4.7

读取图片

1
imread(filename, flags)
  1. filename:图片路径
  2. flags
    1. IMREAD_COLOR:默认值,返回3通道的BGR色彩图像
    2. IMREAD_GRAYSCALE:返回单通道灰色图片
    3. IMREAD_UNCHANGED:按原样返回。
阅读全文

图像的读写与显示

读取图像

使用函数 cv.imread() 来读取图像,该函数共两个参数

  1. 图像的路径
  2. 图像的读取方式
    1. cv.IMREAD_COLOR 加载彩色图像,图像的任何透明度都将被忽略。这是默认标志
    2. cv.IMREAD_GRAYSCALE 以灰度模式加载图像
    3. cv.IMREAD_UNCHANGED 加载图像,包括 alpha 通道

例:

1
2
3
import cv2 as cv

img = cv.imread("1.jpg", cv.IMREAD_COLOR)

警告:如果图像路径错误,它将不会引发任何错误,但是会返回一个空值

阅读全文