본문 바로가기

OpenCV

ch03 BasicOp

#Python Code
import cv2
import numpy as np

def PointOp():
    pt1 = np.array([0, 0])  # pt1 = (0, 0)
    pt1[0] = 5
    pt1[1] = 10  # pt1 = (5, 10)
    pt2 = np.array([10, 30])  # pt2 = (10, 30)

    pt3 = pt1 + pt2  # pt3 = [15, 40]
    pt4 = pt1 * 2  # pt4 = [10, 20]
    d1 = np.dot(pt1, pt2)  # d1 = 350
    b1 = np.array_equal(pt1, pt2)  # b1 = False

    print("pt1:", pt1)
    print("pt2:", pt2)
    print("pt3:", pt3)
    print("pt4:", pt4)
    print("d1:", d1)
    print("b1:", b1)

def SizeOp():
    sz1 = np.array([0, 0])  # sz1 = [0, 0]
    sz2 = np.array([10, 20])  # sz2 = [10, 20]
    sz1[0] = 5
    sz1[1] = 10  # sz1 = [5, 10]

    sz3 = sz1 + sz2  # sz3 = [15, 30]
    sz4 = sz1 * 2  # sz4 = [10, 20]
    area1 = sz4[0] * sz4[1]  # area1 = 200

    print("sz3:", sz3)
    print("sz4:", sz4)
    print("area1:", area1)

def RectOp():
    rc1 = np.zeros(4) # cv2.Rect(0, 0, 0, 0)  # rc1 = [0 x 0 from (0, 0)]
    rc2 = np.array([10, 10, 60, 40])  #cv2.Rect(10, 10, 60, 40)  # rc2 = [60 x 40 from (10, 10)]

    rc3 = np.array([rc1[0], rc1[1], 50, 40])  #cv2.Rect(rc1.x, rc1.y, 50, 40)  # rc3 = [50 x 40 from (0, 0)]
    rc4 = np.array([rc2[0] + 10, rc2[1] + 10, rc2[2], rc2[3]]) # cv2.Rect(rc2.x + 10, rc2.y + 10, rc2.width, rc2.height)  # rc4 = [60 x 40 from (20, 20)]

    rc5 = np.array([rc3[0], rc3[1], min(rc3[3], rc4[2]), min(rc3[3], rc4[2])]) #cv2.Rect(rc3.x, rc3.y, min(rc3.width, rc4.width), min(rc3.height, rc4.height))  # rc5 = [30 x 20 from (10, 10)]
    rc6 = np.array([min(rc3[0], rc4[0]), min(rc3[1], rc4[1]), max(rc3[2], rc4[2]), max(rc3[3], rc4[3])])#cv2.Rect(min(rc3.x, rc4.x), min(rc3.y, rc4.y), max(rc3.width, rc4.width), max(rc3.height, rc4.height))  # rc6 = [80 x 60 from (0, 0)]

    print("rc5:", rc5)
    print("rc6:", rc6)


def RotatedRectOp():
    rr1 = cv2.RotatedRect((40, 30), (40, 20), 30.0)

    pts = cv2.boxPoints(rr1)
    pts = np.int0(pts)

    br = cv2.boundingRect(pts)

    print("RotatedRect points:", pts)
    print("BoundingRect:", br)

def RangeOp():
    r1 = range(0, 10)
    print("Range:", list(r1))

def StringOp():
    str1 = "Hello"
    str2 = "world"
    str3 = str1 + " " + str2  # str3 = "Hello world"

    ret = (str2 == "WORLD")
    print("str3:", str3)
    print("ret:", ret)

    imgs = []
    for i in range(3):
        filename = "data{:02d}.bmp".format(i + 1)
        print(filename)
        img = cv2.imread(filename)
        imgs.append(img)

if __name__ == '__main__':
    PointOp()
    SizeOp()
    RectOp()
    RotatedRectOp()
    RangeOp()
    StringOp()

// C++ Code
#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

void PointOp();
void SizeOp();
void RectOp();
void RotatedRectOp();
void RangeOp();
void StringOp();

int main()
{
	PointOp();
	SizeOp();
	RectOp();
	RotatedRectOp();
	RangeOp();
	StringOp();

	return 0;
}

void PointOp()
{
	Point pt1;				// pt1 = (0, 0)
	pt1.x = 5; pt1.y = 10;	// pt1 = (5, 10)
	Point pt2(10, 30);		// pt2 = (10, 30)

	Point pt3 = pt1 + pt2;	// pt3 = [15, 40]
	Point pt4 = pt1 * 2;	// pt4 = [10, 20]
	int d1 = pt1.dot(pt2);	// d1 = 350
	bool b1 = (pt1 == pt2);	// b1 = false

	cout << "pt1: " << pt1 << endl;
	cout << "pt2: " << pt2 << endl;
}

void SizeOp()
{
	Size sz1, sz2(10, 20);			// sz1 = [0 x 0], sz2 = [10 x 20]
	sz1.width = 5; sz1.height = 10;	// sz1 = [5 x 10]

	Size sz3 = sz1 + sz2;	// sz3 = [15 x 30]
	Size sz4 = sz1 * 2;		// sz4 = [10 x 20]
	int area1 = sz4.area();	// area1 = 200

	cout << "sz3: " << sz3 << endl;
	cout << "sz4: " << sz4 << endl;
}

void RectOp()
{
	Rect rc1;					// rc1 = [0 x 0 from (0, 0)]
	Rect rc2(10, 10, 60, 40);	// rc2 = [60 x 40 from (10, 10)]

	Rect rc3 = rc1 + Size(50, 40);	// rc3 = [50 x 40 from (0, 0)]
	Rect rc4 = rc2 + Point(10, 10);	// rc4 = [60 x 40 from (20, 20)]

	Rect rc5 = rc3 & rc4;		// rc5 = [30 x 20 from (10, 10)]
	Rect rc6 = rc3 | rc4;		// rc6 = [80 x 60 from (0, 0)]

	cout << "rc5: " << rc5 << endl;
	cout << "rc6: " << rc6 << endl;
}

void RotatedRectOp()
{
	RotatedRect rr1(Point2f(40, 30), Size2f(40, 20), 30.f);

	Point2f pts[4];
	rr1.points(pts);

	Rect br = rr1.boundingRect();
}

void RangeOp()
{
	Range r1(0, 10);
}

void StringOp()
{
	String str1 = "Hello";
	String str2 = "world";
	String str3 = str1 + " " + str2;	// str3 = "Hello world"

	bool ret = (str2 == "WORLD");

	Mat imgs[3];
	for (int i = 0; i < 3; i++) {
		String filename = format("data%02d.bmp", i + 1);
		cout << filename << endl;
		imgs[i] = imread(filename);
	}
}

 

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


pt1: [ 5 10]
pt2: [10 30]
pt3: [15 40]
pt4: [10 20]
d1: 350
b1: False
sz3: [15 30]
sz4: [10 20]
area1: 200
rc5: [ 0.  0. 40. 40.]
rc6: [ 0.  0. 60. 40.]
RotatedRect points: [[17 28]
 [27 11]
 [62 31]
 [52 48]]
BoundingRect: (17, 11, 46, 38)
Range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
str3: Hello world
ret: False
data01.bmp
data02.bmp
data03.bmp

'OpenCV' 카테고리의 다른 글

ch04 drawing  (0) 2024.05.19
ch03 ScalarOp  (0) 2024.05.19
ch03 MatOp  (0) 2024.05.19
ch03 InputArrayOp  (0) 2024.05.19
ch02 Hello OpenCV  (0) 2024.05.19