【不断更新贴】总结编程的技巧、语法等,需要多敲代码、记忆掌握

1. void DrawRectangle( cv::Mat& img, cv::Rect  box )
{
cv::rectangle(img, box.tl(),box.br(),cv::Scalar(g_rng.uniform(0, 255), g_rng.uniform(0,255), g_rng.uniform(0,255)));//随机颜色

}

注意: Rect类型可以直接通过Rect.tl()  Rect.br() 获取矩形的左上角、右下角坐标 

查看源码的定义:! the top-left corner
                         //Point_<_Tp> tl() const;
                        //! the bottom-right corner
                          //Point_<_Tp> br() const;


2.随机颜色: RNG   g_rng(12345);

cv::rectangle(img,box.tl(),box.br(),cv::Scalar(g_rng.uniform(0, 255), g_rng.uniform(0,255), g_rng.uniform(0,255)));//随机颜色

查看RNG源码:

/! returns uniformly distributed double-precision floating-point random number from [a,b) range
//double uniform(double a, double b);


3.深度复制MAT

     (1)Mat srcImage(600, 800,CV_8UC3), tempImage;
        srcImage.copyTo(tempImage);

      (2)Mat tempImage=srcImage.clone()


4.定义ROI区域

   Mat image=imread("~~~~");

  Mat imageROI=image(Rect(300,230,logo.cols,logo.rows));


5. convertScaleAbs  

使用线性变换转换输入数组元素成8位无符号整型。  convertScaleAbs( normImage, scaledImage );//将归一化后的图线性变换成8位无符号整型 

void cvConvertScaleAbs( const CvArr* src, CvArr* dst, double scale=1, double shift=0 );
#define cvCvtScaleAbs cvConvertScaleAbs
其中参数含义:
src : 原数组
dst :输出数组 (深度为 8u).
scale :比例因子.
shift :原数组元素按比例缩放后添加的值。
函数 cvConvertScaleAbs 与前一函数是相同的,但它是存贮变换结果的绝对值:
dst(I)=abs(src(I)*scale + (shift,shift,...))
函数只支持目标数数组的深度为 8u (8-bit 无符号) , 对于别的类型函数仿效于cvConvertScale 和 cvAbs 函数的联合 。

6.normalize
// 归一化与转换
normalize( dstImage, normImage, 0, 255, NORM_MINMAX, CV_32FC1, Mat() );

函数原型:

    void normalize(InputArray src,OutputArray dst, double alpha=1, doublebeta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray() )

    该函数归一化输入数组使它的范数或者数值范围在一定的范围内。

Parameters:

src

    输入数组

dst

    输出数组,支持原地运算

alpha

    range normalization模式的最小值

beta

    range normalization模式的最大值,不用于norm normalization(范数归一化)模式。

normType

    归一化的类型,可以有以下的取值:

    NORM_MINMAX:数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。

    NORM_INF: 此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C-范数(绝对值的最大值)

    NORM_L1 :  归一化数组的L1-范数(绝对值的和)

    NORM_L2: 归一化数组的(欧几里德)L2-范数

dtype

    dtype为负数时,输出数组的type与输入数组的type相同;

否则,输出数组与输入数组只是通道数相同,而tpye=CV_MAT_DEPTH(dtype).

mask

    操作掩膜,用于指示函数是否仅仅对指定的元素进行操作。

归一化公式:

1、线性函数转换,表达式如下:(对应NORM_MINMAX)

ifmask(i,j)!=0

    dst(i,j)=(src(i,j)-min(src))*(b‘-a‘)/(max(src)-min(src))+ a‘

else

     dst(i,j)=src(i,j)

    其中b‘=MAX(a,b), a‘=MIN(a,b);

2. 当norm_type!=CV_MINMAX:

ifmask(i,j)!=0

    dst(i,j)=src(i,j)*a/norm (src,norm_type,mask)

else

    dst(i,j)=src(i,j)

    其中,函数norm的功能是计算norm(范数)的绝对值

Thefunctions norm calculate an absolute norm of src1 (when there is no src2 ):

技术分享





你可能感兴趣的:(opencv)