zoukankan      html  css  js  c++  java
  • ike实习笔记(一)

    PART 1 :  opencv函数:

    1. cvCopy

    /* Copies source array to destination array */

    CVAPI(void)  cvCopy( const CvArr* src, CvArr* dst,

                         const CvArr* mask CV_DEFAULT(NULL) );

    下面是Opencv官方手册的对cvCopy的说明:

    Copy

    拷贝一个数组给另一个数组

    void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );

    src

    输入数组。

    dst

    输出数组。

    mask

    操作掩码是8比特单通道的数组,它指定了输出数组中被改变的元素。

    函数cvCopy从输入数组中复制选定的成分到输出数组:

    如果mask(I)!=0,则dst(I)=src(I)。 (注:即提取mask非零的元素)

    如果输入输出数组中的一个是IplImage类型的话,其ROI和COI将被使用。输入输出数组必须是同样的类型、维数和大小。函数也可以用来复制散列数组(这种情况下不支持mask)。

    2. cvGet2D 

    CVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 );

    功能:读取图像arr中下标为(y , x)的像素

    对于图像中的某一像素点 P(x, y), 在我们正常的坐标系中,x代表其横坐标,y代表其纵坐标,而在opencv的函数 cvGet2D()与cvSet2D() 中,却行不通。cvGet2D() 的函数原型是 : CvScalar  cvGet2D (const CvArr * arr, int idx0, int idx1); 函数返回的是一个CvScalar 容器,其参数中也有两个方向的坐标,但跟我们平常习惯的坐标不一样的是,idx0代表是的行,即高度(hight),对应于我们平常坐标系的y, idx1代表的是列,即宽度(width),对应于我们平常坐标系的x,cvSet2D() 也类似。所以在使用cvSet2D() 与 cvGet2D() 时,千万要注意坐标的顺序。

    (本段转自:http://hi.baidu.com/%D1%A9%B0%B5%CF%E3_%BD%E0%BD%E0/blog/item/f3e6aac19250daeb52664f8c.html )

    CVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );

    一般的概念中

             |------------------------------------------------

             |            列数 / width / x

             |

             |

             |  行数 / height / y

             |

             |

             |

    在cvGet2D 和 cvSet2D 中:

             |------------------------------------------------

             |            idx1 / x

             |

             |

             |  idx0 / y

             |

             |

             |

    3. cvGetQuadrangleSubPix

    /* Retrieves quadrangle from the input array.

        matrixarr = ( a11  a12 | b1 )   dst(x,y) <- src(A[x y]' + b)

                    ( a21  a22 | b2 )   (bilinear interpolation is used to retrieve pixels with fractional coordinates)

    */

    CVAPI(void)  cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst,

                                        const CvMat* map_matrix );

    官方手册说明:

    对图像进行仿射变换,c语言有两个函数:

    C: void cvWarpAffine(const CvArr* src, CvArr* dst, const CvMat* mapMatrix, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CvScalar fillval=cvScalarAll(0) )

    C: void cvGetQuadrangleSubPix(const CvArr* src, CvArr* dst, const CvMat* mapMatrix)

    参数:

    Src 源图像, dst 目标图像

    mapMatrix : 一个2*3的转换矩阵,cvMat格式。

    |  M11  M12  M13  |

    |  M21  M22  M23  |

    源图像和目标图像的转换公式:

    dst(x,y) = src( M11*x + M12*y + M13,M21*x + M22*y + M23 )

    特别的源图像的(M13,M23)点 即为目标图像的(0,0)点。

     4. cvLoadImage

    参考百度百科。

    函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );

      filename :要被读入的文件的文件名(包括后缀);

      flags :指定读入图像的颜色和深度:

      指定的颜色可以将输入的图片转为3信道(CV_LOAD_IMAGE_COLOR), 单信道 (CV_LOAD_IMAGE_GRAYSCALE), 或者保持不变(CV_LOAD_IMAGE_ANYCOLOR)。

      深度指定输入的图像是否转为每个颜色信道每象素8位,(OpenCV的早期版本一样),或者同输入的图像一样保持不变。

      选中CV_LOAD_IMAGE_ANYDEPTH,则输入图像格式可以为8位无符号,16位无符号,32位有符号或者32位浮点型。

      如果输入有冲突的标志,将采用较小的数字值。比如CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYCOLOR 将载入3信道图。CV_LOAD_IMAGE_ANYCOLOR和CV_LOAD_IMAGE_UNCHANGED是等值的。但是,CV_LOAD_IMAGE_ANYCOLOR有着可以和CV_LOAD_IMAGE_ANYDEPTH同时使用的优点,所以CV_LOAD_IMAGE_UNCHANGED不再使用了。

      如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR。

      函数cvLoadImage从指定文件读入图像,返回读入图像的指针。目前支持如下文件格式

      Windows位图文件 - BMP, DIB;

      JPEG文件 - JPEG, JPG, JPE;

      便携式网络图片- PNG;

      便携式图像格式 - PBM,PGM,PPM;

      Sun rasters - SR,RAS;

      TIFF文件 - TIFF,TIF;

      OpenEXR HDR 图片 - EXR;

      JPEG 2000 图片- jp2。

      cvSaveImage

      保存图像到文件

      int cvSaveImage( const char* filename, const CvArr* image );

      filename

      文件名。

      image

      要保存的图像。

      函数cvSaveImage保存图像到指定文件。图像格式的的选择依赖于filename的扩展名,请参考cvLoadImage。只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换;或者使用通用的cvSave保存图像为XML或者YAML格式。

    特别提醒!由于TIFF文件格式比较混乱,难以统一,此函数读取TIFF图片可能会失败。

      cvLoadImage( filename, -1 ); 默认读取图像的原通道数

    cvLoadImage( filename, 0 ); 强制转化读取图像为灰度图

    cvLoadImage( filename, 1 ); 读取彩色图

     5. CvScalar

    CvScalar 类(基本数据结构):

    typedef struct CvScalar

     {

      double val[4]

     }

     CvScalar;

    一般用于存储一个某一个像素点的值,

    S.val[0] 对应B通道

    S.val[1] 对应G通道

    S.val[2] 对应R通道

    S.val[3] 对应Alpha通道

  • 相关阅读:
    【DOM】如何给div的placeholder传参
    【nvm】使用nvm将node升级到指定版本
    【Worktile】升级业务组件库后,http的数据返回整个response而不是data问题及解决方案
    js获取上传文件内容
    【正则】正则表达式-零宽断言(?=,?<=,?!,?<!)及常见报错
    【Angular】动态组件
    【扩展】div获取焦点或可编辑
    【CSS】position新增属性sticky
    thinkphp写接口返回固定的形式方法
    thinkphp5计算文件大小
  • 原文地址:https://www.cnblogs.com/linkr/p/2742568.html
Copyright © 2011-2022 走看看