Files
Capstone_Design/ch11/morphology/main.cpp
2025-04-30 12:11:45 +09:00

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();
}