OpenCV 4.10.0
开源计算机视觉
|
这些函数支持对二值图像进行形态学操作。为了快速且节约空间,使用游程表示对二值图像进行编码。这种表示方式将连续的水平“打开”像素序列分组在一个“游程”中。一个游程以游程中第一个像素的列位置、游程中最后一个像素列位置和行位置为特征。这种表示方式对于包含大面积连续“打开”和“关闭”像素的二值图像非常紧凑。棋盘格图案是一个很好的示例。对于由随机噪声图像或其他相邻像素之间几乎没有关联性的图像创建的二值图像来说,这种表示方式不太适合。
此处支持的形态学操作与 imgproc 模块中支持的操作非常相似。它们通常很快。但在某些情况下,它们比 imgproc 中的函数慢。结构单元 cv::MORPH_RECT 和 cv::MORPH_CROSS 得到 imgproc 模块的极佳支持。同时,小型结构单元在 imgproc 中非常快(大概是因为有 opencl 支持)。因此,对于较大的结构单元(cv::MORPH_ELLIPSE 或自定义结构单元),推荐使用此模块中的函数。提供了一个示例应用程序(run_length_morphology_demo),用于比较在给定图像上使用游程编码的函数和 imgproc 函数的某些形态学操作的速度。
游程编码图像存储在标准的 opencv 图像中。图像含有一列 cv::Point3i 元素。行数等于游程数量 + 1。第一行包含原始(未编码)图像的大小。对于游程,使用以下映射(x:起始列,y:结束列(最后一列),z:行)。
当边界处理需要图像边界之外的像素为“打开”时,需要原始图像的大小才能与 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 | runs 向量 |
res | 结果 |
size | 图像大小(用于腐蚀中是否使用“开”边界,使用默认值意味着检查结果的派生是通过输入的派生的) |
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 | 结果 |
rlKernel | 内核 |
锚点 | 元素内锚点的位置;默认值 (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 | 结果 |
rlKernel | 内核 |
bBoundaryOn | 指示图像边界外部的像素是否被设为开(真:以与cv::erode的默认值相同的方式工作,假:要快一点) |
锚点 | 元素内锚点的位置;默认值 (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 | 结果 |
op | cv::morphologyEx 支持的所有操作(cv::MORPH_HITMISS 除外) |
rlKernel | 内核 |
bBoundaryOnForErosion | 表示腐蚀操作中是否存在图像边界之外的像素(True:与 cv::erode 的默认设置工作方式相同,False:速度更快) |
锚点 | 元素内锚点的位置;默认值 (0, 0) 通常是元素中心。 |
void cv::ximgproc::rl::paint | ( | InputOutputArray | image, |
InputArray | rlSrc, | ||
const cv::Scalar & | value | ||
) |
#include <opencv2/ximgproc/run_length_morphology.hpp>
将运行长度编码的二值图像绘制到图像中。
image | 待绘制的图像(当前仅限于单通道图像)。 |
rlSrc | 运行长度编码的图像 |
value | 二值图像的所有前景像素都设置为该值 |
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) |