zoukankan      html  css  js  c++  java
  • opencv使用中的一点经验记录

    1、OpenCv中三通道颜色为BRG,而非RGB,其原因大概是BRG在当时的年代是最流行的(具体见:https://www.learnopencv.com/why-does-opencv-use-bgr-color-format/)

    2、常见的二维图像坐标体系中零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线;Y轴为图像矩形左边的那条垂直线。在OpenCv中Rect(cv::Rect cvRect(int x, int y, int width, int height)),Point(CvPoint cvPoint(int x, int y ))都符合这类坐标系,但是使用image.at<>(i,j)、image[i,j]时,i相当于y轴,或者说行数;j相当于x轴,或者说列数。(参考:https://blog.csdn.net/hyqsong/article/details/49754927)

    3、Mat进行拷贝构造、赋值运算符只是创建了头部分,其数据部分仍是共享的(参考:https://blog.csdn.net/corcplusplusorjava/article/details/24641011)。为了可以修改数据部分,可以选择使用clone()或者copyTo。二者之间的区别(https://stackoverflow.com/questions/15672600/whats-the-difference-between-matclone-and-matcopyto)

    clone()的实现:

    inline Mat Mat::clone() const
    {
      Mat m;
      copyTo(m);
      return m;
    }

    可以看出,clone()在拷贝时给目标mat分配了新的地址。

    4、contourArea计算轮廓面积,简单来说其计算面积是每两个轮廓点向量的叉乘(具体:https://blog.csdn.net/m0_37914500/article/details/78615284),所以计算处理和直接数像素个数总数并不是一样的。

    5、cvBox2D和RotatedRect中的角度(具体:https://www.cnblogs.com/panxiaochun/p/5478555.html 作者非常用心)

    主要有几点:(1) 坐标系是原点在左上角,x轴水平向右,y轴竖直向下;(2) width是x轴逆时钟旋转时碰到的第一条边;(3) 逆时钟旋转角度为负;(4) 返回的角度单位为度,而不是弧度。

    6、下采样函数pyrDown中向下是图像尺寸减半,当时图像金字塔里,向上是图像减小(https://blog.csdn.net/qq_20823641/article/details/52221442)

    7、pyrDown/pyrUp和resize的区别(https://stackoverflow.com/questions/19074184/whats-the-difference-between-resize-and-prydown-pryup-in-opencv):pyrDown和pyrUp是为了构建图像金字塔的,上/下采样类似于最邻近插值;resize是用于缩放图像的,有多种插值方式可以选择。

  • 相关阅读:
    题解 UVA10213 【How Many Pieces of Land ?】
    NOIP 2018 游记
    POJ 1821 Fence(单调队列优化DP)
    HDU 2196 Computer(经典树形DP)
    POJ 2228 Naptime(DP+环形处理)
    POJ 1742 Coins(多重背包?)
    POJ 2311 Cutting Game(SG函数)
    BZOJ 2560(子集DP+容斥原理)
    HDU2841 Visible Trees(容斥原理)
    HDU 1796 How many integers can you find(容斥原理)
  • 原文地址:https://www.cnblogs.com/liuxin0430/p/9170339.html
Copyright © 2011-2022 走看看