12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #pragma once
- #include "pch.h"
- #include <opencv2/opencv.hpp>
- #include <random>
- /**
- * 获取二值化图像(黑底白字)白色点个数
- * @param image 原图
- * @return 个数
- */
- int getWhitePixNumber(cv::Mat& img);
- /**
- * 开运算&闭运算
- * @param image 原图
- * @return 个数
- */
- void openImg(const cv::Mat& lpImgSrc, cv::Mat& lpImgDes, cv::Size sizeErode);
- void colseImg(const cv::Mat& lpImgSrc, cv::Mat& lpImgDes, cv::Size sizeErode);
- /**
- * 保持长宽比不变缩放图像
- * @param w,h w=0,则按照h计算新的宽度,反之依然
- * @param image 原图
- * @return 缩放后的图像
- */
- cv::Mat scaleImage(int w, int h, cv::Mat& image);
- cv::Mat paddingResize(cv::Mat& image, int w, int h);
- cv::Mat paddingNoResize(cv::Mat& image, int w, int h);
- // 四等分后放入
- cv::Mat splitAndInsertImages(const cv::Mat& imageA, const cv::Mat& imageB);
- /**
- * 获取全部的bbx
- * @param img
- * @return vector<结果>
- */
- std::vector<cv::Rect> getAllBoundingBoxes(const cv::Mat& img);
- struct Cluster {
- cv::Rect rect;
- std::vector<int> indices;
- };
- /**
- * 对给定的矩形框进行聚类,按照指定的规则将在高度方向有重叠的矩形框合并为一个。
- * @param rectangles 待聚类的矩形框集合
- * @return 聚类结果,包含聚类矩形框和对应的矩形框索引
- */
- std::vector<Cluster> clusterRectangles(const std::vector<cv::Rect>& rectangles);
- /**
- * 在指定的矩形区域内创建mask蒙版并覆盖到图像上。
- * @param image 待操作的图像 (BGR格式)
- * @param box 需要蒙版覆盖的区域
- * @param alpha 透明度 (0-100之间的值,0为完全透明,100为完全不透明)
- * @param useRandColor 是否使用随机颜色 (默认为true)
- * @param color 传入指定的颜色 (仅在useRandColor为false时有效)
- * @return 覆盖蒙版后的图像
- */
- void rectangleMask(cv::Mat& image, const cv::Rect& box, int alpha, bool useRandColor = true, const cv::Scalar& color = cv::Scalar());
- /**
- * 检查并调整矩形框的合法性,确保其在图像内部。
- * @param image 输入图像
- * @param box 待调整的矩形框,会被修改为在图像内部的合法位置
- */
- void adjustBoundingBox(const cv::Mat& image, cv::Rect& box);
- void adjustBoundingBox(int w,int h, cv::Rect& box);
- /**
- * 使用opencv自带的函数实现 在指定位置打印要显示的文字,##不支持汉字##
- * @param image 输入图像
- * @param pos 要显示的位置的左上角顶点
- * @param text 要显示的文字内容
- * @param width 显示文字的最大宽度,=0则忽略该参数
- * @param height 显示文字的高度,函数内根据该参数动态计算字体大小
- */
- void printText(const cv::Mat& image, const cv::Point &pos,const std::string & text,int height, int width=0 );
- /**
- * 计算两个cv::Rect的类IOU,返回值 = boxA和boxB的重合面积/boxA面积
- * @param boxA
- * @param boxB
- * @return (boxA∩boxB).area()/boxA.area()
- */
- double boxSimIOU(cv::Rect boxA, cv::Rect boxB);
- /**
- * 计算两个cv::Rect在y轴投影的IOU,用于mrege横向重叠的box
- * @param boxA
- * @param boxB
- * @return boxA.width∩boxB.width/boxA.width∪boxB.width
- */
- double boxVerProjectionSimIOU(cv::Rect boxA, cv::Rect boxB);
|