본문 바로가기

OpenCV

ch04 mouse

#python code


import cv2

# 전역 변수 선언
img = None
ptOld = None

def on_mouse(event, x, y, flags, param):
    global ptOld, img

    if event == cv2.EVENT_LBUTTONDOWN:
        ptOld = (x, y)
        print(f"EVENT_LBUTTONDOWN: {x}, {y}")
    elif event == cv2.EVENT_LBUTTONUP:
        print(f"EVENT_LBUTTONUP: {x}, {y}")
    elif event == cv2.EVENT_MOUSEMOVE:
        if flags & cv2.EVENT_FLAG_LBUTTON:
            cv2.line(img, ptOld, (x, y), (0, 255, 255), 2)
            cv2.imshow("img", img)
            ptOld = (x, y)

def main():
    global img

    img = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch04\\mouse\\lenna.bmp")

    if img is None:
        print("Image load failed!")
        return -1

    cv2.namedWindow("img")
    cv2.setMouseCallback("img", on_mouse)

    cv2.imshow("img", img)
    cv2.waitKey()

    return 0

if __name__ == "__main__":
    main()

// C++ code


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

using namespace cv;
using namespace std;

Mat img;
Point ptOld;
void on_mouse(int event, int x, int y, int flags, void*);

int main(void)
{
	img = imread("lenna.bmp");

	if (img.empty()) {
		cerr << "Image load failed!" << endl;
		return -1;
	}
	
	namedWindow("img");
	setMouseCallback("img", on_mouse);

	imshow("img", img);
	waitKey();

	return 0;
}

void on_mouse(int event, int x, int y, int flags, void*)
{
	switch (event) {
	case EVENT_LBUTTONDOWN:
		ptOld = Point(x, y);
		cout << "EVENT_LBUTTONDOWN: " << x << ", " << y << endl;
		break;
	case EVENT_LBUTTONUP:
		cout << "EVENT_LBUTTONUP: " << x << ", " << y << endl;
		break;
	case EVENT_MOUSEMOVE:
		if (flags & EVENT_FLAG_LBUTTON) {
			line(img, ptOld, Point(x, y), Scalar(0, 255, 255), 2);
			imshow("img", img);
			ptOld = Point(x, y);
		}
		break;
	default:
		break;
	}
}

C++ Code 출처 : OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝 - 황선규 저


'OpenCV' 카테고리의 다른 글

ch04 trackbar  (0) 2024.05.19
ch04 storage  (0) 2024.05.19
ch04 keyboard  (0) 2024.05.19
ch04 drawing  (0) 2024.05.19
ch03 ScalarOp  (0) 2024.05.19