做了一个简单的去水印功能,基于文字检测去图片水印。效果如下:
插件功能代码参考如下:
- using namespace cv::dnn;
- TextDetectionModel_DB *textDetector=0;
- void getTextDetector()
- {
- if(textDetector)return;
- String modelPath = "text_detection_DB_TD500_resnet18_2021sep.onnx"; //模型权重文件
-
- textDetector=new TextDetectionModel_DB(modelPath);
-
- float binThresh = 0.3; //二值图的置信度阈值
- float polyThresh = 0.5 ; //文本多边形阈值
- double unclipRatio = 2.0; //检测到的文本区域的未压缩比率,gai比率确定输出大小
- uint maxCandidates = 200;
-
- textDetector->setBinaryThreshold(binThresh)
- .setPolygonThreshold(polyThresh)
- .setUnclipRatio(unclipRatio)
- .setMaxCandidates(maxCandidates);
-
- double scale = 1.0 / 255.0;
- int height = 736; //输出图片长宽
- int width = 736;
- Size inputSize = Size(width, height);
- Scalar mean = Scalar(122.67891434, 116.66876762, 104.00698793);
- textDetector->setInputParams(scale, inputSize, mean);
-
- }
-
-
- void deWaterMarkTextDetection(Mat &input,Mat &output,Mat &src,string)
- {
- getTextDetector();
- // 推理
- std::vector
> results; - textDetector->detect(input, results);
-
- Mat mask = Mat::zeros(input.size(), CV_8U);
- fillPoly(mask, results,Scalar::all(255));
-
-
- //将掩模进行膨胀,使其能够覆盖图像更大区域
- Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
- dilate(mask, mask, kernel);
-
- //使用inpaint进行图像修复
- Mat result;
- inpaint(src, mask, output, 1, INPAINT_NS);
- }
《QT 插件化图像算法研究平台》其它内容:
欢迎广大朋友沟通交流,微信/QQ:23245175,加好友,请备注:插件软件。