2025-10-09 17:30:43 +02:00
|
|
|
#include "histo.h"
|
|
|
|
|
#include "opencv2/imgcodecs.hpp"
|
|
|
|
|
#include "opencv2/videoio.hpp"
|
|
|
|
|
#include <opencv2/core.hpp>
|
|
|
|
|
#include <opencv2/highgui.hpp>
|
|
|
|
|
#include <opencv2/imgproc.hpp>
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
|
|
using namespace cv;
|
|
|
|
|
|
|
|
|
|
int calc_th(Mat img, float fg_ratio = 0.1f){
|
|
|
|
|
int nfg = img.cols * img.rows * fg_ratio;
|
|
|
|
|
Mat histo;
|
|
|
|
|
Histo::calcHistoC1(img, histo);
|
|
|
|
|
|
|
|
|
|
double s = 0;
|
|
|
|
|
int th = 0;
|
|
|
|
|
|
|
|
|
|
for(; th < 256; th++){
|
|
|
|
|
s += histo.at<int>(th);
|
|
|
|
|
if(s >= nfg){
|
|
|
|
|
return th;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int main(){
|
|
|
|
|
Mat img = imread("../scanned3.png", IMREAD_GRAYSCALE);
|
|
|
|
|
int th = calc_th(img, 0.1f);
|
2025-11-05 11:32:53 +01:00
|
|
|
imshow("t", img);
|
2025-10-09 17:30:43 +02:00
|
|
|
Mat mask;
|
|
|
|
|
if(th != -1){
|
|
|
|
|
threshold(img, mask, th, 255, THRESH_BINARY);
|
|
|
|
|
imshow("img2", mask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while(waitKey(3) != 'q');
|
|
|
|
|
return 0;
|
|
|
|
|
}
|