opencv使用中的一点经验记录

本文详细解析了OpenCV中的一些关键知识点,包括三通道颜色顺序、图像坐标系、矩阵拷贝方式、轮廓面积计算方法、图像金字塔上下采样以及图像缩放等。这些内容对于理解和应用OpenCV库进行图像处理非常重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)时,i相当于y轴,j相当于x轴。(参考:https://blog.youkuaiyun.com/hyqsong/article/details/49754927)

3、Mat进行拷贝构造、赋值运算符只是创建了头部分,其数据部分仍是共享的(参考:https://blog.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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是用于缩放图像的,有多种插值方式可以选择。

转载于:https://www.cnblogs.com/liuxin0430/p/9170339.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值