OpenCV 4.11.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 | 行程向量 |
res | 结果 |
大小 | 图像大小(如果在腐蚀中应该使用“开启”边界,则使用;使用默认值表示大小是从输入的扩展计算的) |
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 | 指示图像边界外的像素是否被认为是边界内像素的一部分 (True: 与 cv::erode 的默认值相同;False: 速度稍快) |
锚点 | 锚点在元素中的位置;默认值 (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) |