Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <algorithm>
- #include <iostream>
- #include <string>
- #include <opencv2/opencv.hpp>
- using namespace cv;
- using namespace std;
- vector<string> files = { "P_20210309_064128_vHDR_Auto.jpg",
- "P_20210410_170757_vHDR_On.jpg" ,
- "P_20210410_170813_vHDR_On.jpg" ,
- "P_20210410_170832_vHDR_On.jpg" ,
- "P_20210410_170858_vHDR_On.jpg" ,
- "P_20210410_170941_vHDR_On.jpg" ,
- "P_20210410_171129_vHDR_On.jpg" ,
- "P_20210410_171136_vHDR_On.jpg" ,
- "P_20210410_171334_vHDR_On.jpg" ,
- };
- void VizContours(Mat& src, const vector<Point>& points, const Scalar& color) {
- Point pt = points.back();
- for (auto& cur : points) {
- line(src, pt, cur, color, 5, LINE_AA);
- pt = cur;
- }
- }
- void FillHoles(const Mat& src, Mat& dst, int d) {
- src.copyTo(dst);
- for (int i = 0; i + d < src.rows; i += d) {
- for (int j = 0; j + d < src.cols; j += d) {
- int k = 0;
- for (int l = 0; l < d; ++l) {
- for (int m = 0; m < d; ++m) {
- if (dst.at<uchar>(i + l, j + m) < 128) {
- ++k;
- }
- }
- }
- if (k > 0.1 * d * d) {
- for (int l = 0; l < d; ++l) {
- for (int m = 0; m < d; ++m) {
- dst.at<uchar>(i + l, j + m) = 0;
- }
- }
- }
- }
- }
- }
- int main() {
- for (int i = 0; i < files.size(); ++i)
- {
- cout << "Image #" << i << endl;
- Mat src = imread(files[i]);
- Mat grayImg, blurImg, binImg, cannyImg, filtImg, dilImg;
- cvtColor(src, grayImg, COLOR_BGR2GRAY);
- GaussianBlur(grayImg, grayImg, {3, 3}, 0);
- dilate(grayImg, dilImg, getStructuringElement(cv::MORPH_RECT, cv::Point(9, 9)));
- //bilateralFilter(grayImg, filtImg, 9, 75, 75);
- //Mat temp1, temp2;
- // adaptiveThreshold(filtImg, temp1, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 11, 2);
- //adaptiveThreshold(temp1, temp2, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 21, 5);
- //adaptiveThreshold(filtImg, binImg, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 151, 5);
- //adaptiveThreshold(filtImg, binImg, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 21, 3);
- //medianBlur(binImg, blurImg, 21);
- //FillHoles(blurImg, blurImg, 15);
- //copyMakeBorder(blurImg, blurImg, 10, 10, 10, 10, BORDER_CONSTANT, { 0, 0, 0 });
- //copyMakeBorder(src, src, 10, 10, 10, 10, BORDER_DEFAULT, { 0, 0, 0 });
- imwrite("1bin" + to_string(i) + ".jpg", dilImg);
- //Mat revImg;
- //bitwise_not(blurImg, revImg);
- Canny(blurImg, cannyImg, 200, 250);
- imwrite("3conturs" + to_string(i) + ".jpg", cannyImg);
- vector<vector<Point>> contours;
- vector<Vec4i> hierarchy;
- findContours(cannyImg, contours, hierarchy, RETR_LIST, CHAIN_APPROX_SIMPLE);
- sort(contours.begin(), contours.end(), [](vector<Point>& lhs, vector<Point>& rhs) {
- return fabs(arcLength(Mat(lhs), true)) < fabs(arcLength(Mat(rhs), true));
- });
- //Mat trash;
- //src.copyTo(trash);
- //drawContours(trash, contours, -1, Scalar(255, 0, 0), 2, LINE_AA, hierarchy, 1);
- //imwrite("4trash" + to_string(i) + ".jpg", trash);
- vector<Point> mainContour = contours.back();
- double perimetr = arcLength(mainContour, true);
- Mat result1, result2;
- approxPolyDP(mainContour, result1, 0.03 * perimetr, true);
- approxPolyDP(mainContour, result2, 1e-9, true);
- //drawContours(src, { result2 }, -1, Scalar(0, 165, 255), 10, LINE_8);
- //drawContours(src, { mainContour }, -1, Scalar(0, 165, 255), 1, LINE_8);
- VizContours(src, result1, Scalar(255, 165, 0));
- VizContours(src, result2, Scalar(0, 165, 255));
- imwrite("2result" + to_string(i) + ".jpg", src);
- }
- waitKey(0);
- }
- /*
- *
- ### Задание
- 1. Реализовать выделение "границ и уголков" на фотографиях документа.
- 2. Реализовать детектирование наиболее правдоподобного четырехугольника изображения страницы документа на фото.
- 3. Используя эталонную геометрическую разметку из лабораторной 5 реализовать численную оценку качества выделения отдельных примитивов и финального результата для отдельных изображений и для набора.
- 4. Реализовать представление результатов выполнения лабораторной (иллюстрации, таблицы, графики и т.д.) и вставить в отчет.
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement