OPENCV图像变换基础,是上面几篇变换(霍夫曼等前提)

卷积边界:cvCopyMakeBorder()将特定图像边界轻微变大,大多变换会用到这个函数
void cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset,
int bordertype, CvScalar value=cvScalarAll(0) );
src
输入图像。
dst
输出图像。
offset
输入图像(或者其ROI)欲拷贝到的输出图像长方形的左上角座标(或者左下角座标,如果以左下角为原点)。长方

形的尺寸要和原图像的尺寸的ROI分之一匹配。
大多数给可以把offset设置为cvPoint((N-1)/2,(N-1)/2),使得边界每一侧都是偶数。
bordertype
已拷贝的原图像长方形的边界的类型:
IPL_BORDER_CONSTANT – 填充边界为固定值,值由函数最后一个参数指定。
IPL_BORDER_REPLICATE -边界用上下行或者左右列来复制填充。(许多变换用这个)
value
如果边界类型为IPL_BORDER_CONSTANT的话,那么此为边界像素的值。
函数cvCopyMakeBorder拷贝输入2维阵列到输出阵列的内部并且在拷贝区域的周围制作一个指定类型的边界。函数可

以用来模拟和嵌入在指定算法实现中的边界不同的类型。例如:和opencv中大多数其他滤波函数一样,一些形态学函

数内部使用复制边界类型,但是用户可能需要零边界或者填充为1或255的边界。
CONSTANT总体看来就像边界加上value色彩的边界

Sobel导数(梯度):求出x,y轴的N阶导数
void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size=3 );
src
输入图像.
dst
输出图像.
xorder
x 方向上的差分阶数
yorder
y 方向上的差分阶数
aperture_size
扩展 Sobel 核的大小,必须是 1, 3, 5 或 7。 除了尺寸为 1, 其它情况下, aperture_size ×aperture_size

可分离内核将用来计算差分。对 aperture_size=1的情况, 使用 3×1 或 1×3 内核 (不进行高斯平滑操作)。这里

有一个特殊变量 CV_SCHARR (=-1),对应 3×3 Scharr 滤波器,可以给出比 3×3 Sobel 滤波更精确的结果。

做出的图片看起来就是:黑白颜色,对于那个轴求导,那个轴上的线段明显,成白色(黑色线段变成的)。
当输入图像是 8 位的,要求输出图像是 16 位的。当然可以用函数 cvConvertScale 或 cvConvertScaleAbs 转换为

8 位的。除了 8-比特 图像,函数也接受 32-位 浮点数图像。所有输入和输出图像都必须是单通道的,并且具有相

同的图像尺寸或者ROI尺寸。

霍夫圆变换:求图像中的圆
CvSeq* cvHoughCircles( CvArr* image, void* circle_storage,
                       int method, double dp, double min_dist,
                       double param1=100, double param2=100,
                       int min_radius=0, int max_radius=0 );
image 8位单通道
circle_storage可以是数组也可以是内存空间。数组的话应该是CV_32FC3类型单列数组,即FLOAT型,3个通道分别是

圆的位置还有半径。
method 必须是CV_HOUGH_GRADIENT
dp指累加器图像的分辨率。不能比1小,当为1时,分辨率相同。当为2时候,分辨率变小,为原来一半。
min_dist区分两个不同圆之间最小距离。
param1 边缘阈值(canny)
param1 累加器阈值。
后两个是能发现圆半径范围。

 

 

 

说白了,各种变换是对图像进行卷积变换。

点赞