📄 opencvref_cv.cn.htm
字号:
</tr><tr><td><font size=5 color="#008000"><p align="center">G</font></td><td><font size=5 color="#0000ff"><p align="center">B</font></td><td><font size=5 color="#008000"><p align="center">G</font></td><td><font size=5 color="#0000ff"><p align="center">B</font></td><td><font size=5 color="#008000"><p align="center">G</font></td></tr></table> <p>对象素输出的RGB分量由该象素的1、2或者4邻域中具有相同颜色的点插值得到。以上的模式可以通过向左或者向上平移一个像素点来作一些修改。转换常量CV_BayerC1C22{RGB|RGB}中的两个字母C1和C2表示特定的模式类型:颜色分量分别来自于第二行,第二和第三列。比如说,上述的模式具有很流行的"BG"类型。</p> </ul><hr><h3><a name="decl_cvThreshold">Threshold</a></h3><p class="Blurb">对数组元素进行固定阈值操作</p><pre>void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type );</pre><p><dl><dt>src<dd>原始数组 (单通道, 8-比特 of 32-比特 浮点数). <dt>dst<dd>输出数组,必须与 <code>src</code> 的类型一致,或者为 8-比特. <dt>threshold<dd>阈值<dt>max_value<dd>使用 <code>CV_THRESH_BINARY</code> 和 <code>CV_THRESH_BINARY_INV</code> 的最大值. <dt>threshold_type<dd>阈值类型 (见讨论) </dl><p>函数 <a href="#decl_cvThreshold">cvThreshold</a> 对单通道数组应用固定阈值操作。该函数的典型应用是对灰度图像进行阈值操作得到二值图像。(<a href="opencvref_cxcore.htm#decl_cvCmpS">cvCmpS</a> 也可以达到此目的) 或者是去掉噪声,例如过滤很小或很大象素值的图像点。本函数支持的对图像取阈值的方法由 <code>threshold_type 确定</code>:</p><pre>threshold_type=CV_THRESH_BINARY:dst(x,y) = max_value, if src(x,y)>threshold 0, otherwisethreshold_type=CV_THRESH_BINARY_INV:dst(x,y) = 0, if src(x,y)>threshold max_value, otherwisethreshold_type=CV_THRESH_TRUNC:dst(x,y) = threshold, if src(x,y)>threshold src(x,y), otherwisethreshold_type=CV_THRESH_TOZERO:dst(x,y) = src(x,y), if (x,y)>threshold 0, otherwisethreshold_type=CV_THRESH_TOZERO_INV:dst(x,y) = 0, if src(x,y)>threshold src(x,y), otherwise</pre><p>下面是图形化的阈值描述:</p><p><image align="center" src="pics/threshold.png"></p><hr><h3><a name="decl_cvAdaptiveThreshold">AdaptiveThreshold</a></h3><p class="Blurb">自适应阈值方法</p><pre>void cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value, int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C, int threshold_type=CV_THRESH_BINARY, int block_size=3, double param1=5 );</pre><p><dl><dt>src<dd>输入图像.<dt>dst<dd>输出图像.<dt>max_value<dd>使用 <code>CV_THRESH_BINARY</code> 和 <code>CV_THRESH_BINARY_INV</code> 的最大值. <dt>adaptive_method<dd>自适应阈值算法使用:<code>CV_ADAPTIVE_THRESH_MEAN_C</code> 或 <code>CV_ADAPTIVE_THRESH_GAUSSIAN_C</code> (见讨论). <dt>threshold_type<dd>取阈值类型:必须是下者之一<ul><li><code>CV_THRESH_BINARY,</code><li><code>CV_THRESH_BINARY_INV</code></ul><dt>block_size<dd>用来计算阈值的象素邻域大小: 3, 5, 7, ... <dt>param1<dd>与方法有关的参数。对方法 <code>CV_ADAPTIVE_THRESH_MEAN_C</code> 和 <code>CV_ADAPTIVE_THRESH_GAUSSIAN_C</code>, 它是一个从均值或加权均值提取的常数(见讨论), 尽管它可以是负数。</dl><p>函数 <a href="#decl_cvAdaptiveThreshold">cvAdaptiveThreshold</a> 将灰度图像变换到二值图像,采用下面公式:</p> <pre>threshold_type=<code>CV_THRESH_BINARY</code>:dst(x,y) = max_value, if src(x,y)>T(x,y) 0, otherwisethreshold_type=<code>CV_THRESH_BINARY_INV</code>:dst(x,y) = 0, if src(x,y)>T(x,y) max_value, otherwise</pre><p>其中 T<sub>I</sub> 是为每一个象素点单独计算的阈值</p> <p>对方法 CV_ADAPTIVE_THRESH_MEAN_C,先求出块中的均值,再减掉param1。</p><p>对方法 CV_ADAPTIVE_THRESH_GAUSSIAN_C ,先求出块中的加权和(gaussian), 再减掉param1。</p> <hr><h2><a name="cv_imgproc_pyramids">金字塔及其应用</a></h2><hr><h3><a name="decl_cvPyrDown">PyrDown</a></h3><p class="Blurb">图像的下采样</p><pre>void cvPyrDown( const CvArr* src, CvArr* dst, int filter=CV_GAUSSIAN_5x5 );</pre><p><dl><dt>src<dd>输入图像.<dt>dst<dd>输出图像, 宽度和高度应是输入图像的一半 <dt>filter<dd>卷积滤波器的类型,目前仅支持 <code>CV_GAUSSIAN_5x5</code> </dl><p>函数 <a href="#decl_cvPyrDown">cvPyrDown</a> 使用 Gaussian 金字塔分解对输入图像向下采样。首先它对输入图像用指定滤波器进行卷积,然后通过拒绝偶数的行与列来下采样图像。</p><hr><h3><a name="decl_cvPyrUp">PyrUp</a></h3><p class="Blurb">图像的上采样</p><pre>void cvPyrUp( const CvArr* src, CvArr* dst, int filter=CV_GAUSSIAN_5x5 );</pre><dl><dt>src<dd>输入图像.<dt>dst<dd>输出图像, 宽度和高度应是输入图像的2倍 <dt>filter<dd>卷积滤波器的类型,目前仅支持 <code>CV_GAUSSIAN_5x5</code> </dl><p>函数 <a href="#decl_cvPyrUp">cvPyrUp</a> 使用Gaussian 金字塔分解对输入图像向上采样。首先通过在图像中插入 0 偶数行和偶数列,然后对得到的图像用指定的滤波器进行高斯卷积,其中滤波器乘以4做差值。所以输出图像是输入图像的 4 倍大小。(<a href="http://www.assuredigit.com">hunnish</a>: 原理不清楚,尚待探讨)</p> <hr><h3><a name="decl_cvPyrSegmentation">PyrSegmentation</a></h3><p class="Blurb">用金字塔实现图像分割</p><pre>void cvPyrSegmentation( IplImage* src, IplImage* dst, CvMemStorage* storage, CvSeq** comp, int level, double threshold1, double threshold2 );</pre><p><dl><dt>src<dd>输入图像.<dt>dst<dd>输出图像.<dt>storage<dd>Storage: 存储连通部件的序列结果 <dt>comp<dd>分割部件的输出序列指针 components. <dt>level<dd>建立金字塔的最大层数<dt>threshold1<dd>建立连接的错误阈值<dt>threshold2<dd>分割簇的错误阈值</dl><p>函数 <a href="#decl_cvPyrSegmentation">cvPyrSegmentation</a> 实现了金字塔方法的图像分割。金字塔建立到 <code>level</code> 指定的最大层数。如果 <code> p(c(a),c(b))<threshold1</code>,则在层 i 的象素点 a 和它的相邻层的父亲象素 b 之间的连接被建立起来, <div> <p>定义好连接部件后,它们被加入到某些簇中。如果<code>p(c(A),c(B))<threshold2</code><code>,</code>则任何两个分割 A 和 B 属于同一簇。</p> <div> <p>如果输入图像只有一个通道,那么</p><div><code> p(c¹,c²)=|c¹-c²|</code>. <p>如果输入图像有单个通道(红、绿、兰),那么 </p><div><code> p(c¹,c²)=0,3·(c¹<sub>r</sub>-c²<sub>r</sub>)+0,59·(c¹<sub>g</sub>-c²<sub>g</sub>)+0,11·(c¹<sub>b</sub>-c²<sub>b</sub>) </code> . <p>每一个簇可以有多个连接部件。</p><div>图像 <code>src</code> 和 <code>dst</code> 应该是 8-比特、单通道 或 3-通道图像,且大小一样 <hr><h2><a name="cv_imgproc_ccomp">连接部件</a></h2><hr><h3><a name="decl_CvConnectedComp">CvConnectedComp</a></h3><p class="Blurb">连接部件</p> <pre> typedef struct CvConnectedComp { double area; /* 连通域的面积 */ float value; /* 分割域的灰度缩放值 */ CvRect rect; /* 分割域的 ROI */ } CvConnectedComp;</pre><hr><h3><a name="decl_cvFloodFill">FloodFill</a></h3><p class="Blurb">用指定颜色填充一个连接域</p><pre>void cvFloodFill( CvArr* image, CvPoint seed_point, CvScalar new_val, CvScalar lo_diff=cvScalarAll(0), CvScalar up_diff=cvScalarAll(0), CvConnectedComp* comp=NULL, int flags=4, CvArr* mask=NULL );#define CV_FLOODFILL_FIXED_RANGE (1 << 16)#define CV_FLOODFILL_MASK_ONLY (1 << 17)</pre><p><dl><dt>image<dd>输入的 1- 或 3-通道, 8-比特或浮点数图像。输入的图像将被函数的操作所改变,除非你选则 CV_FLOODFILL_MASK_ONLY 选项 (见下面). <dt>seed_point<dd>开始的种子点.<dt>new_val<dd>新的重新绘制的象素值<dt>lo_diff<dd> <p align="left">当前观察象素值与其部件领域象素或者待加入该部件的种子象素之负差(Lower difference)的最大值。对 8-比特 彩色图像,它是一个 packed value. <dt>up_diff<dd>当前观察象素值与其部件领域象素或者待加入该部件的种子象素之正差(upper difference)的最大值。 对 8-比特 彩色图像,它是一个 packed value. <dt>comp<dd>指向部件结构体的指针,该结构体的内容由函数用重绘区域的信息填充。<dt>flags<dd>操作选项. 低位比特包含连通值, 4 (缺省) 或 8, 在函数执行连通过程中确定使用哪种邻域方式。高位比特可以是 0 或下面的开关选项的组合:<ul><li>CV_FLOODFILL_FIXED_RANGE - 如果设置,则考虑当前象素与种子象素之间的差,否则考虑当前象素与其相邻象素的差。(范围是浮点数).<li>CV_FLOODFILL_MASK_ONLY - 如果设置,函数不填充原始图像 (忽略 <code>new_val</code>), 但填充面具图像 (这种情况下 MASK 必须是非空的). </ul><dt>mask<dd>运算面具, 应该是单通道、8-比特图像, 长和宽上都比输入图像 <code>image</code> 大两个象素点。若非空,则函数使用且更新面具, 所以使用者需对 <code>mask</code> 内容的初始化负责。填充不会经过 MASK 的非零象素, 例如,一个边缘检测子的输出可以用来作为 MASK 来阻止填充边缘。或者有可能在多次的函数调用中使用同一个 MASK,以保证填充的区域不会重叠。<em>注意</em>: 因为 MASK 比欲填充图像大,所以 <code>mask</code> 中与输入图像(x,y)像素点相对应的点具有<code>(x+1,y+1)坐标。</code> </dl><p>函数 <a href="#decl_cvFloodFill">cvFloodFill</a> 用指定颜色,从种子点开始填充一个连通域。连通性有象素值的接近程度来衡量。在点 <code>(x, y)</code> 的象素被认为是属于重新绘制的区域,如果:</p> <pre>src(x',y')-lo_diff<=src(x,y)<=src(x',y')+up_diff, 灰度图像,浮动范围src(seed.x,seed.y)-lo<=src(x,y)<=src(seed.x,seed.y)+up_diff, 灰度图像,固定范围src(x',y')<sub>r</sub>-lo_diff<sub>r</sub><=src(x,y)<sub>r</sub><=src(x',y')<sub>r</sub>+up_diff<sub>r</sub> 和src(x',y')<sub>g</sub>-lo_diff<sub>g</sub><=src(x,y)<sub>g</sub><=src(x',y')<sub>g</sub>+up_diff<sub>g</sub> 和src(x',y')<sub>b</sub>-lo_diff<sub>b</sub><=src(x,y)<sub>b</sub><=src(x',y')<sub>b</sub>+up_diff<sub>b</sub>, 彩色图像,浮动范围src(seed.x,seed.y)<sub>r</sub>-lo_diff<sub>r</sub><=src(x,y)<sub>r</sub><=src(seed.x,seed.y)<sub>r</sub>+up_diff<sub>r</sub> 和src(seed.x,seed.y)<sub>g</sub>-lo_diff<sub>g</sub><=src(x,y)<sub>g</sub><=src(seed.x,seed.y)<sub>g</sub>+up_diff<sub>g</sub> 和src(seed.x,seed.y)<sub>b</sub>-lo_diff<sub>b</sub><=src(x,y)<sub>b</sub><=src(seed.x,seed.y)<sub>b</sub>+up_diff<sub>b</sub>, 彩色图像,固定范围</pre> 其中 <code>src(x',y')</code> 是象素邻域点的值。也就是说,为了被加入到连通域中,一个象素的彩色/亮度应该足够接近于: <ul><li>它的邻域象素的彩色/亮度值,当该邻域点已经被认为属于浮动范围情况下的连通域。<li>固定范围情况下的种子点的彩色/亮度值</ul><hr><h3><a name="decl_cvFindContours">FindContours</a></h3><p class="Blurb">在二值图像中寻找轮廓</p><pre>int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour, int header_size=sizeof(CvContour), int mode=CV_RETR_LIST, int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) );</pre><p><dl><dt>image<dd>输入的 8-比特、单通道图像. 非零元素被当成 1, 0 象素值保留为 0 - 从而图像被看成二值的。为了从灰度图像中得到这样
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -