반응형

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

 

#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
:

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

erode(), dilate(), morphologyEx() 등 여러 형태학적 연산에 커널(kernel)로 사용할 수 있는 구조적 요소를 간단히 생성해 보자.

 

import cv2

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
print(kernel)

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
print(kernel)

kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))
print(kernel)

kernel = cv2.getStructuringElement(cv2.MORPH_DIAMOND, (5, 5))
print(kernel)

 

 

※ 참고

Morphological Transformation

getStructuringElement()

 

반응형
Posted by J-sean
:

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

Python MSS 라이브러리로 화면을 캡쳐하고 OpenCV로 표시해 보자.

(더 많은 예는 여기서 확인한다)

 

import numpy as np
import cv2
from mss import mss

with mss() as sct:
	# Part of the screen to capture
    monitor = {"top": 40, "left": 0, "width": 800, "height": 640}
    while True:
        img = np.array(sct.grab(monitor))
        cv2.imshow("img", img)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            cv2.destroyAllWindows()
            break

 

거의 실시간으로 굉장히 빠르게 처리한다.

 

※ 참고

MSS Documentation

 

반응형
Posted by J-sean
:

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.