3. erode, dilate, morphologyEx
程式範例
腐蝕
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
Mat srcImage, dstImage;
int erosion_type = MORPH_RECT;
int erosion_size = 3;
Mat element = getStructuringElement(
erosion_type,
Size(2 * erosion_size + 1, 2 * erosion_size + 1),
Point(erosion_size, erosion_size));
srcImage = imread("original_me.jpg", 1);
dstImage = imwrite("modify_me.jpg", 1);
namedWindow("Display Image", WINDOW_NORMAL);
imshow("Original Image", srcImage);
erode(srcImage, dstImage, element);
imshow("Modify Image", dstImage);
waitKey(0);
return 0;
}
膨脹
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
Mat srcImage, dstImage;
int dilation_size = MORPH_RECT;
int dilation_type = 3;
Mat element = getStructuringElement(
dilation_type,
Size(2 * dilation_size + 1, 2 * dilation_size + 1),
Point(dilation_size, dilation_size));
srcImage = imread("original_me.jpg", 1);
dstImage = imwrite("modify_me.jpg", 1);
namedWindow("Display Image", WINDOW_NORMAL);
imshow("Original Image", srcImage);
dilate(srcImage, dstImage, element);
imshow("Modify Image", dstImage);
waitKey(0);
return 0;
}
開運算
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
Mat srcImage, dstImage;
int morph_size = 3;
int morph_elem = MORPH_RECT;
Mat element = getStructuringElement(
morph_elem,
Size(2 * morph_size + 1, 2 * morph_size + 1),
Point(morph_size, morph_size));
srcImage = imread("original_me.jpg", 1);
dstImage = imwrite("modify_me.jpg", 1);
namedWindow("Display Image", WINDOW_NORMAL);
imshow("Original Image", srcImage);
morphologyEx(srcImage, dstImage, MORPH_OPEN, element);
imshow("Modify Image", dstImage);
waitKey(0);
return 0;
}
閉運算
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
Mat srcImage, dstImage;
int morph_size = 3;
int morph_elem = MORPH_RECT;
Mat element = getStructuringElement(
morph_elem,
Size(2 * morph_size + 1, 2 * morph_size + 1),
Point(morph_size, morph_size));
srcImage = imread("original_me.jpg", 1);
dstImage = imwrite("modify_me.jpg", 1);
namedWindow("Display Image", WINDOW_NORMAL);
imshow("Original Image", srcImage);
morphologyEx(srcImage, dstImage, MORPH_CLOSE, element);
imshow("Modify Image", dstImage);
waitKey(0);
return 0;
}
形態學梯度
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
Mat srcImage, dstImage;
int morph_size = 3;
int morph_elem = MORPH_RECT;
Mat element = getStructuringElement(
morph_elem,
Size(2 * morph_size + 1, 2 * morph_size + 1),
Point(morph_size, morph_size));
srcImage = imread("original_me.jpg", 1);
dstImage = imwrite("modify_me.jpg", 1);
namedWindow("Display Image", WINDOW_NORMAL);
imshow("Original Image", srcImage);
morphologyEx(srcImage, dstImage, MORPH_GRADIENT, element);
imshow("Modify Image", dstImage);
waitKey(0);
return 0;
}
頂帽
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
Mat srcImage, dstImage;
int morph_size = 3;
int morph_elem = MORPH_RECT;
Mat element = getStructuringElement(
morph_elem,
Size(2 * morph_size + 1, 2 * morph_size + 1),
Point(morph_size, morph_size));
srcImage = imread("original_me.jpg", 1);
dstImage = imwrite("modify_me.jpg", 1);
namedWindow("Display Image", WINDOW_NORMAL);
imshow("Original Image", srcImage);
morphologyEx(srcImage, dstImage, MORPH_TOPHAT, element);
imshow("Modify Image", dstImage);
waitKey(0);
return 0;
}
黑帽
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
Mat srcImage, dstImage;
int morph_size = 3;
int morph_elem = MORPH_RECT;
Mat element = getStructuringElement(
morph_elem,
Size(2 * morph_size + 1, 2 * morph_size + 1),
Point(morph_size, morph_size));
srcImage = imread("original_me.jpg", 1);
dstImage = imwrite("modify_me.jpg", 1);
namedWindow("Display Image", WINDOW_NORMAL);
imshow("Original Image", srcImage);
morphologyEx(srcImage, dstImage, MORPH_BLACKHAT, element);
imshow("Modify Image", dstImage);
waitKey(0);
return 0;
}
Last updated
Was this helpful?