목차
- C 언어 Codelite에 opencv 라이브러리 링크 및 개발 환경 구성 예제 이전 포스팅 참고 학습
- C 언어 opencv 라이브러리 활용 마우스 드래그시 선 그리기 예제 이전 포스팅 참고 학습
- C 언어 opencv 라이브러리 활용 JPEG 이미지 출력하기 예제 이전 포스팅 참고 학습
- C++ Opencv 활용 사각형 그린 후 마우스 드래그로 이동시키기 예제
- C++ Opencv 활용 마우스 클릭시 기존 사각형 제거하기 예제
C 언어 Codelite에 opencv 라이브러리 링크 및 개발 환경 구성 예제 이전 포스팅 참고 학습
오늘 예제를 실행해보기에 앞서 opencv 라이브러리를 설치하고 codelite 개발 환경에 링크해야합니다. opencv 우분투패키지 설치하는 방법과 Codelite 설치하는 방법, 그리고 링크 방법 모두 이전 포스팅에서 다룬 내용입니다. C 언어로 사각형, 원형 그리기 등 그래픽 함수를 사용하기 위해서는 Opencv 라이브러리가 필수 적입니다. 따라서 아직 개발 환경을 구성하지 못하셨다면 아래 링크를 참고하여 학습해주세요.
2023.09.07 - [C] - [C/C++] C 언어 Codelite에 opencv 라이브러리 링크 및 간단한 확인 예제
C 언어 opencv 라이브러리 활용 마우스 드래그시 선 그리기 예제 이전 포스팅 참고 학습
다음으로 만약 Codelite에 Opencv 개발 환경에 모두 구성되었다면 C 언어 OpenCV를 활용하여 마우스 드래그로 선을 그리는 예제도 미리 알아보세요. OpenCV를 사용하여 이미지를 생성하고, 마우스 드래그 동작을 감지하여 이미지에 선을 그립니다. 이러한 예제는 OpenCV의 GUI 및 이벤트 처리 기능을 활용한 프로그래밍을 연습할 때 유용합니다. 해당 내용이 궁금하시다면 아래 링크를 참고해주세요.
2023.09.07 - [C] - [C/C++] C 언어 opencv 활용 마우스 드래그 선 그리기 예제
C 언어 opencv 라이브러리 활용 JPEG 이미지 출력하기 예제 이전 포스팅 참고 학습
마지막으로 C 언어와 OpenCV를 사용하여 JPEG 이미지를 로드하고 출력하는 예제를 이전 포스팅에서 알아보았습니다. OpenCV를 이용하여 이미지를 화면에 표시하는 간단한 예제로, 이미지 처리 및 표시를 위한 기본적인 개념을 이해하는 데 도움이 될 수 있습니다. C에서 Opencv 라이브러리를 활용하여 JPEG 이미지 출력하는 방법이 궁금하시다면 아래 링크를 참고해주세요.
2023.09.08 - [C] - [C/C++] C 언어 opencv 활용 이미지 파일 출력하기 예제(마우스 이벤트)
C++ Opencv 활용 사각형 그린 후 마우스 드래그로 이동시키기 예제
아래는 OpenCV를 사용하여 사각형을 그리고, 마우스 드래그로 이미지를 이동시키는 예 제입니다.
#include <opencv2/opencv.hpp>
// 전역 변수
cv::Rect rectangle(100, 100, 50, 50); // 초기 사각형 위치와 크기
bool isDragging = false; // 마우스 드래그 중인지 여부
cv::Point2i clickPoint; // 클릭한 지점 저장
// 마우스 이벤트 콜백 함수
void onMouse(int event, int x, int y, int flags, void* userdata) {
if (event == cv::EVENT_LBUTTONDOWN) {
// 왼쪽 마우스 버튼 클릭 시, 드래그 시작
if (rectangle.contains(cv::Point(x, y))) {
isDragging = true;
clickPoint = cv::Point2i(x, y);
}
} else if (event == cv::EVENT_MOUSEMOVE) {
// 마우스 이동 중일 때, 드래그한 사각형 위치 업데이트
if (isDragging) {
int deltaX = x - clickPoint.x;
int deltaY = y - clickPoint.y;
rectangle.x += deltaX;
rectangle.y += deltaY;
clickPoint = cv::Point2i(x, y);
}
} else if (event == cv::EVENT_LBUTTONUP) {
// 왼쪽 마우스 버튼 떼면 드래그 종료
isDragging = false;
}
}
int main() {
// 비어 있는 이미지 생성
cv::Mat image(400, 400, CV_8UC3, cv::Scalar(255, 255, 255));
cv::namedWindow("Drag Rectangle", cv::WINDOW_AUTOSIZE);
cv::setMouseCallback("Drag Rectangle", onMouse);
while (true) {
cv::Mat clone = image.clone(); // 이미지 복제
cv::rectangle(clone, rectangle, cv::Scalar(0, 0, 255));
cv::imshow("Drag Rectangle", clone);
char key = cv::waitKey(10);
if (key == 27) {
break; // ESC 키를 누르면 종료
}
}
return 0;
}
C++ Opencv 활용 마우스 오른쪽 클릭시 기존 사각형 제거하기 예제
아래는 JPEG 이미지를 화면에 출력하고, 마우스 클릭 이벤트를 사용하여 이미지를 제거하는 예제입니다.
#include <opencv2/opencv.hpp>
// 전역 변수
cv::Rect rectangle(100, 100, 50, 50); // 초기 사각형 위치와 크기
bool isDragging = false; // 마우스 드래그 중인지 여부
bool isRectangleSelected = false; // 사각형이 선택되었는지 여부
cv::Point2i clickPoint; // 클릭한 지점 저장
// 마우스 이벤트 콜백 함수
void onMouse(int event, int x, int y, int flags, void* userdata) {
if (event == cv::EVENT_LBUTTONDOWN) {
// 왼쪽 마우스 버튼 클릭 시, 드래그 시작
if (rectangle.contains(cv::Point(x, y))) {
isDragging = true;
isRectangleSelected = true;
clickPoint = cv::Point2i(x, y);
}
} else if (event == cv::EVENT_MOUSEMOVE) {
// 마우스 이동 중일 때, 드래그한 사각형 위치 업데이트
if (isDragging) {
int deltaX = x - clickPoint.x;
int deltaY = y - clickPoint.y;
rectangle.x += deltaX;
rectangle.y += deltaY;
clickPoint = cv::Point2i(x, y);
}
} else if (event == cv::EVENT_LBUTTONUP) {
// 왼쪽 마우스 버튼 떼면 드래그 종료
isDragging = false;
} else if (event == cv::EVENT_RBUTTONDOWN) {
// 오른쪽 마우스 버튼 클릭 시, 사각형 삭제
if (isRectangleSelected && rectangle.contains(cv::Point(x, y))) {
rectangle = cv::Rect(0, 0, 0, 0);
isRectangleSelected = false;
}
}
}
int main() {
// 비어 있는 이미지 생성
cv::Mat image(400, 400, CV_8UC3, cv::Scalar(255, 255, 255));
cv::namedWindow("Drag Rectangle", cv::WINDOW_AUTOSIZE);
cv::setMouseCallback("Drag Rectangle", onMouse);
while (true) {
cv::Mat clone = image.clone(); // 이미지 복제
if (isRectangleSelected) {
cv::rectangle(clone, rectangle, cv::Scalar(0, 0, 255));
}
cv::imshow("Drag Rectangle", clone);
char key = cv::waitKey(10);
if (key == 27) {
break; // ESC 키를 누르면 종료
}
}
return 0;
}