![]() |
OpenCV 4.12.0
开源计算机视觉
|
这些函数支持对二值图像进行形态学操作。为了提高速度和空间效率,二值图像使用游程表示法进行编码。这种表示法将连续的水平“on”像素序列组合成一个“游程”。一个游程的特征是游程中第一个像素的列位置、游程中最后一个像素的列位置和行位置。对于包含大面积连续“on”和“off”像素的二值图像,这种表示法非常紧凑。棋盘格图案就是一个很好的例子。这种表示法不太适合由随机噪声图像或其他相邻像素之间相关性很小的图像创建的二值图像。
此处支持的形态学操作与 imgproc 模块中支持的操作非常相似。一般来说,它们速度很快。但是,在某些情况下,它们比 imgproc 中的函数慢。 imgproc 模块对 cv::MORPH_RECT 和 cv::MORPH_CROSS 结构元素提供了非常好的支持。此外,小结构元素在 imgproc 中速度非常快(可能是由于 opencl 支持)。因此,对于较大的结构元素(cv::MORPH_ELLIPSE 或自定义结构元素),建议使用此模块中的函数。提供了一个示例应用程序 (run_length_morphology_demo),该应用程序允许比较使用游程编码的函数的形态学运算速度和给定图像的 imgproc 函数的速度。
游程编码图像存储在标准 opencv 图像中。图像具有单列 cv::Point3i 元素。行数是游程数 + 1。第一行包含原始(未编码)图像的大小。对于游程,使用以下映射(x:列起始位置,y:列结束位置(最后一列),z:行)。
当边界处理要求图像边界外的像素为“on”时,需要原始图像的大小才能与 imgproc 函数兼容。
函数 | |
| void | cv::ximgproc::rl::createRLEImage (const std::vector< cv::Point3i > &runs, OutputArray res, Size size=Size(0, 0)) |
| 从游程向量(列起始位置、列结束位置、行)创建游程编码图像 | |
| void | cv::ximgproc::rl::dilate (InputArray rlSrc, OutputArray rlDest, InputArray rlKernel, Point anchor=Point(0, 0)) |
| 通过使用特定的结构元素来膨胀游程编码的二值图像。 | |
| void | cv::ximgproc::rl::erode (InputArray rlSrc, OutputArray rlDest, InputArray rlKernel, bool bBoundaryOn=true, Point anchor=Point(0, 0)) |
| 通过使用特定的结构元素来腐蚀游程编码的二值图像。 | |
| cv::Mat | cv::ximgproc::rl::getStructuringElement (int shape, Size ksize) |
| 返回指定大小和形状的游程编码结构元素。 | |
| bool | cv::ximgproc::rl::isRLMorphologyPossible (InputArray rlStructuringElement) |
| 检查自定义结构元素是否可以与游程形态学运算一起使用。(它必须由每行单个游程的连续数组组成) | |
| void | cv::ximgproc::rl::morphologyEx (InputArray rlSrc, OutputArray rlDest, int op, InputArray rlKernel, bool bBoundaryOnForErosion=true, Point anchor=Point(0, 0)) |
| 对游程编码的二值图像应用形态学运算。 | |
| void | cv::ximgproc::rl::paint (InputOutputArray image, InputArray rlSrc, const cv::Scalar &value) |
| 将行程长度编码的二值图像绘制到图像中。 | |
| void | cv::ximgproc::rl::threshold (InputArray src, OutputArray rlDest, double thresh, int type) |
| 对每个数组元素应用固定级别的阈值。 | |
| void cv::ximgproc::rl::createRLEImage | ( | const std::vector< cv::Point3i > & | runs, |
| OutputArray | res, | ||
| Size | size = Size(0, 0) ) |
#include <opencv2/ximgproc/run_length_morphology.hpp>
从游程向量(列起始位置、列结束位置、行)创建游程编码图像
| runs | 游程向量 |
| res | result |
| size | 图像大小(如果侵蚀中使用“on”边界,则使用此大小,使用默认值意味着从输入的扩展计算大小) |
| void cv::ximgproc::rl::dilate | ( | InputArray | rlSrc, |
| OutputArray | rlDest, | ||
| InputArray | rlKernel, | ||
| Point | anchor = Point(0, 0) ) |
#include <opencv2/ximgproc/run_length_morphology.hpp>
通过使用特定的结构元素来膨胀游程编码的二值图像。
| rlSrc | 输入图像 |
| rlDest | result |
| rlKernel | kernel |
| anchor | 元素内锚点的位置;默认值 (0, 0) 通常是元素中心。 |
| void cv::ximgproc::rl::erode | ( | InputArray | rlSrc, |
| OutputArray | rlDest, | ||
| InputArray | rlKernel, | ||
| bool | bBoundaryOn = true, | ||
| Point | anchor = Point(0, 0) ) |
#include <opencv2/ximgproc/run_length_morphology.hpp>
通过使用特定的结构元素来腐蚀游程编码的二值图像。
| rlSrc | 输入图像 |
| rlDest | result |
| rlKernel | kernel |
| bBoundaryOn | 指示是否假定图像边界外的像素为 on(True:以与 cv::erode 的默认值相同的方式工作,False:速度稍快) |
| anchor | 元素内锚点的位置;默认值 (0, 0) 通常是元素中心。 |
#include <opencv2/ximgproc/run_length_morphology.hpp>
返回指定大小和形状的游程编码结构元素。
| shape | 元素形状,可以是 cv::MorphShapes 之一 |
| ksize | 结构元素的大小。 |
| bool cv::ximgproc::rl::isRLMorphologyPossible | ( | InputArray | rlStructuringElement | ) |
#include <opencv2/ximgproc/run_length_morphology.hpp>
检查自定义结构元素是否可以与游程形态学运算一起使用。(它必须由每行单个游程的连续数组组成)
| rlStructuringElement | 要测试的掩码 |
| void cv::ximgproc::rl::morphologyEx | ( | InputArray | rlSrc, |
| OutputArray | rlDest, | ||
| int | op, | ||
| InputArray | rlKernel, | ||
| bool | bBoundaryOnForErosion = true, | ||
| Point | anchor = Point(0, 0) ) |
#include <opencv2/ximgproc/run_length_morphology.hpp>
对游程编码的二值图像应用形态学运算。
| rlSrc | 输入图像 |
| rlDest | result |
| op | cv::morphologyEx 支持的所有操作(cv::MORPH_HITMISS 除外) |
| rlKernel | kernel |
| bBoundaryOnForErosion | 指示是否假定图像边界外的像素对于侵蚀运算为 on(True:以与 cv::erode 的默认值相同的方式工作,False:速度稍快) |
| anchor | 元素内锚点的位置;默认值 (0, 0) 通常是元素中心。 |
| void cv::ximgproc::rl::paint | ( | InputOutputArray | image, |
| InputArray | rlSrc, | ||
| const cv::Scalar & | 值 ) |
#include <opencv2/ximgproc/run_length_morphology.hpp>
将行程长度编码的二值图像绘制到图像中。
| image | 要绘制到的图像(当前仅支持单通道图像)。 |
| rlSrc | 游程编码图像 |
| 值 | 二值图像的所有前景像素都设置为该值 |
| void cv::ximgproc::rl::threshold | ( | InputArray | src, |
| OutputArray | rlDest, | ||
| double | thresh, | ||
| int | type ) |
#include <opencv2/ximgproc/run_length_morphology.hpp>
对每个数组元素应用固定级别的阈值。
| src | 输入数组(单通道)。 |
| rlDest | 生成的游程编码图像。 |
| thresh | 阈值。 |
| type | 阈值类型(仅支持 cv::THRESH_BINARY 和 cv::THRESH_BINARY_INV) |