วันพฤหัสบดีที่ 23 มีนาคม พ.ศ. 2560

C++ opencv Dilation Erosion

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

#include <iostream>
#include <conio.h>

using namespace cv;
using namespace std;

Mat frame, erosion_dst, dilation_dst;
int erosion_elem = 0;
int erosion_size = 0;
int dilation_elem = 0;
int dilation_size = 0;
int const max_elem = 2;
int const max_kernel_size = 21;

/* Function prototype */
void Erosion(int, void*);
void Dilation(int, void*);

int main(int argc, char** argv)
{
VideoCapture cap(0);

while (1)
{
cap >> frame;
/// Create windows
namedWindow("Erosion Demo", CV_WINDOW_AUTOSIZE);
namedWindow("Dilation Demo", CV_WINDOW_AUTOSIZE);
cvMoveWindow("Dilation Demo", frame.cols, 0);

/// Create Erosion Trackbar
createTrackbar("Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Erosion Demo", &erosion_elem, max_elem, Erosion);
createTrackbar("Kernel size:\n 2n +1", "Erosion Demo", &erosion_size, max_kernel_size, Erosion);

/// Create Dilation Trackbar
createTrackbar("Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Dilation Demo", &dilation_elem, max_elem, Dilation);
createTrackbar("Kernel size:\n 2n +1", "Dilation Demo", &dilation_size, max_kernel_size, Dilation);

// Default start
Erosion(0, 0);
Dilation(0, 0);

if (waitKey(30) == 27)
break;
}
return 0;
}

/**  @function Erosion  */
void Erosion(int, void*)
{
int erosion_type;
if (erosion_elem == 0)
erosion_type = MORPH_RECT;
else if (erosion_elem == 1)
erosion_type = MORPH_CROSS;
else if (erosion_elem == 2)
erosion_type = MORPH_ELLIPSE;

Mat element = getStructuringElement(erosion_type, Size(2 * erosion_size + 1, 2 * erosion_size + 1), Point(erosion_size, erosion_size));
// Apply the erosion operation
erode(frame, erosion_dst, element);
imshow("Erosion Demo", erosion_dst);
}

/* @function Dilation */
void Dilation(int, void*)
{
int dilation_type;
if (dilation_elem == 0)
dilation_type = MORPH_RECT;
else if (dilation_elem == 1)
dilation_type = MORPH_CROSS;
else if (dilation_elem == 2)
dilation_type = MORPH_ELLIPSE;

Mat element = getStructuringElement(dilation_type, Size(2 * dilation_size + 1, 2 * dilation_size + 1), Point(dilation_size, dilation_size));
// Apply the dilation operation
dilate(frame, dilation_dst, element);
imshow("Dilation Demo", dilation_dst);
}

ไม่มีความคิดเห็น:

แสดงความคิดเห็น