#include <opencv2/opencv.hpp>
#include <iostream>
int main(int argc, char** argv){
cv::Mat src = cv::imread("../../source/line.png");
if(src.empty()){
std::cout << "could not load image ...." << std::endl;
return -1;
}
cv::namedWindow("src img");
cv::imshow("src img", src);
cv::Mat gray_img;
cv::cvtColor(src, gray_img, cv::COLOR_BGR2GRAY);
cv::namedWindow("gray img");
cv::imshow("gray img", gray_img);
cv::bitwise_not(gray_img, gray_img);
cv::namedWindow("bitwise not img");
cv::imshow("bitwise not img", gray_img);
cv::Mat binary_img;
cv::adaptiveThreshold(gray_img, binary_img, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 15, -3);
cv::namedWindow("binary img");
cv::imshow("binary img", binary_img);
cv::Mat hlin = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(binary_img.cols / 8, 1));
cv::Mat h_img;
cv::morphologyEx(binary_img, h_img, cv::MORPH_OPEN, hlin);
cv::namedWindow("h img");
cv::imshow("h img", h_img);
cv::blur(h_img, h_img, cv::Size(3, 3));
cv::namedWindow("final h img");
cv::imshow("final h img", ~h_img);
cv::Mat vlin = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(1, binary_img.rows / 8));
cv::Mat v_img;
cv::morphologyEx(binary_img, v_img, cv::MORPH_OPEN, vlin);
cv::namedWindow("v img");
cv::imshow("v img", v_img);
cv::blur(v_img, v_img, cv::Size(3, 3));
cv::namedWindow("final v img");
cv::imshow("final v img", ~v_img);
cv::waitKey();
}
|