72 lines
1.7 KiB
C++
72 lines
1.7 KiB
C++
#include <iostream>
|
|
#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();
|
|
} |