Mat对象的复制
- opencv矩阵赋值函数copyTo、clone、赋值运算符‘=’ 之间实现的功能相似均是给不同的矩阵赋值功能。
- copyTo和clone函数基本相同,被赋值的矩阵和赋值矩阵之间空间独立,不共享同一空间(深拷贝)。
- 但是重载元算赋‘=’,被赋值的矩阵和赋值矩阵之间空间共享,改变任一个矩阵的值,会同时影响到另一个矩阵(浅拷贝)。当矩阵作为函数的返回值时其功能和重载元算赋‘=’相同,赋值运算赋会给矩阵空间增加一次计数,所以函数变量返回后函数内部申请的变量空间并不会被撤销,在主函数中仍可以正常使用传递后的参数。
彩色图像转化为三通道灰度图
首先把彩色图像(三通道)转化为灰度图(单通道),然后把灰度图(单通道)转化为灰色图像(三通道)。
Mat src = imread("E:/OpenCV学习/images/hist_01.jpg");
Mat gray1, gray3;
cvtColor(src, gray1, COLOR_BGR2GRAY); //将彩色图像转换成单通道灰度图
cvtColor(gray1, gray3, COLOR_GRAY2BGR); //将灰度图转换成3通道图像
转换后的图像三个通道显示图像一样的,但是均值和标准差前两个通道是一样的,第3个通道稍有差别。这是为何?
RNG生成随机数函数
- 定义随机对象
- 产生64位随机整数
- 产生[0,1)内均匀分布的double类型数据
- 产生[0,1)内均匀分布的float类型数据
- 产生均值为0,标准差为1的高斯分布函数
绘制多边形
//可以一次绘制一个或者多个多边形,可以填充
void drawContours( InputOutputArray image, InputArrayOfArrays contours,
int contourIdx, const Scalar& color,
int thickness = 1, int lineType = LINE_8,
InputArray hierarchy = noArray(),
int maxLevel = INT_MAX, Point offset = Point() );
//绘制多边形,不可以填充
void polylines(InputOutputArray img, InputArrayOfArrays pts,
bool isClosed, const Scalar& color,
int thickness = 1, int lineType = LINE_8, int shift = 0 );
//填充多边形
void fillPoly(InputOutputArray img, InputArrayOfArrays pts,
const Scalar& color, int lineType = LINE_8, int shift = 0,
Point offset = Point() );
//填充凸多边形(目前测试与 fillPoly 函数执行结果一致)
void fillConvexPoly(InputOutputArray img, InputArray points,
const Scalar& color, int lineType = LINE_8,
int shift = 0);
绘制标记
void drawMarker(InputOutputArray img, Point position, const Scalar& color,
int markerType = MARKER_CROSS, int markerSize=20, int thickness=1,
int line_type=8);