#include #include "opencv2/opencv.hpp" using namespace cv; using namespace std; void erode_dilate() { Mat src = imread("../../resources/images/milkdrop.bmp", IMREAD_GRAYSCALE); Mat bin; threshold(src, bin, 0, 255, THRESH_BINARY | THRESH_OTSU); Mat dst1, dst2; erode(bin, dst1, getStructuringElement(MorphShapes::MORPH_CROSS, Size(7, 7))); dilate(bin, dst2, getStructuringElement(MorphShapes::MORPH_ELLIPSE, Size(3, 5))); imshow("src", src); imshow("bin", bin); imshow("erode", dst1); imshow("dilate", dst2); cv::waitKey(); cv::destroyAllWindows(); } void open_close() { cv::VideoCapture video("../../resources/images/vtest.avi"); if (!video.isOpened()) { std::cerr << "camera.isopened()" << std::endl; return; } cv::Mat src; cv::Mat prevSrc; double fps = 1000 / video.get(cv::VideoCaptureProperties::CAP_PROP_FPS); std::cout << "\n\n" << fps << "\n\n"; while (true) { prevSrc = src; video >> src; if (src.empty()) { std::cerr << "img.empty()" << std::endl; return; } cv::imshow("src", src); if (cv::waitKey(fps) == 27) break; } cv::cvtColor(src, src, cv::COLOR_BGR2GRAY); src.convertTo(src, CV_8U); Mat bin; threshold(src, bin, 0, 255, THRESH_BINARY | THRESH_OTSU); Mat dst1, dst2, dst3, dst4, dst5; morphologyEx(bin, dst1, MORPH_OPEN, Mat()); morphologyEx(bin, dst2, MORPH_CLOSE, Mat()); morphologyEx(bin, dst3, MORPH_GRADIENT, Mat()); Canny(bin, dst4, 30, 127); dst5 = std::abs(src - prevSrc); imshow("src", src); imshow("bin", bin); imshow("erode", dst1); imshow("dilate", dst2); imshow("gradient", dst3); imshow("Canny", dst4); cv::waitKey(); cv::destroyAllWindows(); } int main(int argc, char* argv[]) { open_close(); }