miniprojet/tests/examples/test-contour.cpp

45 lines
1.2 KiB
C++
Raw Normal View History

#include <math.hpp>
int main(int argc, char** argv) {
std::string imagename = "";
int threshold = 25;
std::string save_path = ".";
if (argc > 3) {
imagename = argv[1];
threshold = atoi(argv[2]);
save_path = argv[3];
} else {
std::cout << "Invalid number of arguments: test-descripteurs <path_to_image> [<threshold>]" << std::endl;
return 0;
}
cv::namedWindow("Image", CV_WINDOW_AUTOSIZE);
cv::namedWindow("Contour", CV_WINDOW_AUTOSIZE);
cv::Mat image = cv::imread(imagename, CV_LOAD_IMAGE_COLOR);
cv::Mat binary(image.rows, image.cols, CV_8UC1);
cv::Mat contour(image.rows, image.cols, CV_8UC1);
cv::GaussianBlur(image, image, cv::Size(7,7), 1.5, 1.5);
math::filter(image, binary, threshold);
std::vector<std::vector<cv::Point>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(binary, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
if (contours.size() != 0) {
int id = math::max_cont(contours);
cv::drawContours(contour, contours, id, 255, 4);
}
cv::imshow("Image", image);
cv::imshow("Contour", contour);
cv::imwrite(save_path+"/raw_image.png", image);
cv::imwrite(save_path+"/contour_"+std::to_string(threshold)+".png", contour);
cv::waitKey(0);
return 0;
}