반응형

폴리곤 마스크를 생성하고 사용해 보자.

 

#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
	cv::Mat image(480, 640, CV_8UC3, cv::Scalar(0, 0, 0));
	//cv::Mat image = cv::Mat::zeros(480, 640, CV_8UC3);

	std::vector<cv::Point> points1 = { cv::Point(100, 100), cv::Point(200, 100), cv::Point(200, 200), cv::Point(100, 200) };
	std::vector<cv::Point> points2 = { cv::Point(300, 300), cv::Point(400, 300), cv::Point(400, 400), cv::Point(300, 400) };

	//cv::fillPoly(image, { points1 }, cv::Scalar(0, 255, 0));
	//cv::fillPoly(image, { points2 }, cv::Scalar(255, 0, 0));

	// 한번에 두 개의 다각형을 그릴 때는 std::vector<std::vector<cv::Point>> 형태로 전달해야 한다.
	cv::fillPoly(image, std::vector<std::vector<cv::Point>>{points1, points2}, cv::Scalar(0, 255, 0));

	/*
	// 포인트 벡터 배열로 다각형 생성
	std::vector<std::vector<cv::Point>> pointsArray = {
		{ cv::Point(100, 100), cv::Point(200, 100), cv::Point(200, 200), cv::Point(100, 200) },
		{ cv::Point(300, 300), cv::Point(400, 300), cv::Point(400, 400), cv::Point(300, 400) }
	};

	cv::fillPoly(image, pointsArray, cv::Scalar(0, 255, 0));
	*/

	cv::imshow("image", image);
	cv::waitKey(0);
	cv::destroyAllWindows();

	return 0;
}

 

 

#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
	cv::Mat mask(480, 640, CV_8UC1, cv::Scalar(0));

	std::vector<cv::Point> points1 = { cv::Point(100, 100), cv::Point(200, 100), cv::Point(200, 200), cv::Point(100, 200) };

	cv::fillPoly(mask, { points1 }, cv::Scalar(255));

	// Invert the mask
	cv::Mat invertedMask;
	cv::bitwise_not(mask, invertedMask);
	//invertedMask = ~mask;

	cv::imshow("mask", mask);
	cv::imshow("invertedMask", invertedMask);
	cv::waitKey(0);
	cv::destroyAllWindows();

	return 0;
}

 

 

 

#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
	cv::Mat image = cv::imread("palvin1.png");
	cv::Mat mask = cv::Mat::zeros(image.size(), CV_8UC1);

	std::vector<cv::Point> points1 = { cv::Point(400, 60), cv::Point(550, 60), cv::Point(580, 250), cv::Point(370, 250) };
	cv::fillPoly(mask, { points1 }, cv::Scalar(255));

	cv::Mat result;
	image.copyTo(result, mask);

	cv::imshow("Original Image", image);
	cv::imshow("Mask", mask);
	cv::imshow("Result", result);

	cv::waitKey(0);
	cv::destroyAllWindows();

	return 0;
}

 

 

 

 

 

※ 참고

2026.03.13 - [분류 전체보기] - [OpenCV] Select Region of Interest ROI 선택

2026.03.11 - [OpenCV] - [OpenCV] Polygon Mask 폴리곤 마스크 2

 

반응형
Posted by J-sean
: