#python
import cv2
import numpy as np
def affine_transform():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch08\\affine\\tekapo.bmp")
if src is None:
print("Image load failed!")
return
srcPts = np.array([[0, 0], [src.shape[1] - 1, 0], [src.shape[1] - 1, src.shape[0] - 1]], dtype=np.float32)
dstPts = np.array([[50, 50], [src.shape[1] - 100, 100], [src.shape[1] - 50, src.shape[0] - 50]], dtype=np.float32)
M = cv2.getAffineTransform(srcPts, dstPts)
dst = cv2.warpAffine(src, M, (src.shape[1], src.shape[0]))
cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
def affine_translation():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch08\\affine\\tekapo.bmp")
if src is None:
print("Image load failed!")
return
M = np.array([[1, 0, 150], [0, 1, 100]], dtype=np.float32)
dst = cv2.warpAffine(src, M, (src.shape[1], src.shape[0]))
cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
def affine_shear():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch08\\affine\\tekapo.bmp")
if src is None:
print("Image load failed!")
return
mx = 0.3
M = np.array([[1, mx, 0], [0, 1, 0]], dtype=np.float32)
dst = cv2.warpAffine(src, M, (int(src.shape[1] + src.shape[0] * mx), src.shape[0]))
cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
def affine_scale():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch08\\affine\\rose.bmp")
if src is None:
print("Image load failed!")
return
dst1 = cv2.resize(src, None, fx=4, fy=4, interpolation=cv2.INTER_NEAREST)
dst2 = cv2.resize(src, (1920, 1280))
dst3 = cv2.resize(src, (1920, 1280), interpolation=cv2.INTER_CUBIC)
dst4 = cv2.resize(src, (1920, 1280), interpolation=cv2.INTER_LANCZOS4)
cv2.imshow("src", src)
cv2.imshow("dst1", dst1[500:900, 400:800])
cv2.imshow("dst2", dst2[500:900, 400:800])
cv2.imshow("dst3", dst3[500:900, 400:800])
cv2.imshow("dst4", dst4[500:900, 400:800])
cv2.waitKey(0)
cv2.destroyAllWindows()
def affine_rotation():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch08\\affine\\tekapo.bmp")
if src is None:
print("Image load failed!")
return
cp = (src.shape[1] // 2, src.shape[0] // 2)
M = cv2.getRotationMatrix2D(cp, 20, 1)
dst = cv2.warpAffine(src, M, (src.shape[1], src.shape[0]))
cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
def affine_flip():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch08\\affine\\eastsea.bmp")
if src is None:
print("Image load failed!")
return
cv2.imshow("src", src)
flipCode = [1, 0, -1]
for code in flipCode:
dst = cv2.flip(src, code)
desc = "flipCode: " + str(code)
cv2.putText(dst, desc, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 1, cv2.LINE_AA)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == "__main__":
affine_transform()
affine_translation()
affine_shear()
affine_scale()
affine_rotation()
affine_flip()
// C++
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
void affine_transform();
void affine_translation();
void affine_shear();
void affine_scale();
void affine_rotation();
void affine_flip();
int main(void)
{
affine_transform();
affine_translation();
affine_shear();
affine_scale();
affine_rotation();
affine_flip();
return 0;
}
void affine_transform()
{
Mat src = imread("tekapo.bmp");
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
Point2f srcPts[3], dstPts[3];
srcPts[0] = Point2f(0, 0);
srcPts[1] = Point2f(src.cols - 1, 0);
srcPts[2] = Point2f(src.cols - 1, src.rows - 1);
dstPts[0] = Point2f(50, 50);
dstPts[1] = Point2f(src.cols - 100, 100);
dstPts[2] = Point2f(src.cols - 50, src.rows - 50);
Mat M = getAffineTransform(srcPts, dstPts);
Mat dst;
warpAffine(src, dst, M, Size());
imshow("src", src);
imshow("dst", dst);
waitKey();
destroyAllWindows();
}
void affine_translation()
{
Mat src = imread("tekapo.bmp");
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
Mat M = Mat_<double>({ 2, 3 }, { 1, 0, 150, 0, 1, 100 });
Mat dst;
warpAffine(src, dst, M, Size());
imshow("src", src);
imshow("dst", dst);
waitKey();
destroyAllWindows();
}
void affine_shear()
{
Mat src = imread("tekapo.bmp");
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
double mx = 0.3;
Mat M = Mat_<double>({ 2, 3 }, { 1, mx, 0, 0, 1, 0 });
Mat dst;
warpAffine(src, dst, M, Size(cvRound(src.cols + src.rows * mx), src.rows));
imshow("src", src);
imshow("dst", dst);
waitKey();
destroyAllWindows();
}
void affine_scale()
{
Mat src = imread("rose.bmp");
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
Mat dst1, dst2, dst3, dst4;
resize(src, dst1, Size(), 4, 4, INTER_NEAREST);
resize(src, dst2, Size(1920, 1280));
resize(src, dst3, Size(1920, 1280), 0, 0, INTER_CUBIC);
resize(src, dst4, Size(1920, 1280), 0, 0, INTER_LANCZOS4);
imshow("src", src);
imshow("dst1", dst1(Rect(400, 500, 400, 400)));
imshow("dst2", dst2(Rect(400, 500, 400, 400)));
imshow("dst3", dst3(Rect(400, 500, 400, 400)));
imshow("dst4", dst4(Rect(400, 500, 400, 400)));
waitKey();
destroyAllWindows();
}
void affine_rotation()
{
Mat src = imread("tekapo.bmp");
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
Point2f cp(src.cols / 2.f, src.rows / 2.f);
Mat M = getRotationMatrix2D(cp, 20, 1);
Mat dst;
warpAffine(src, dst, M, Size());
imshow("src", src);
imshow("dst", dst);
waitKey();
destroyAllWindows();
}
void affine_flip()
{
Mat src = imread("eastsea.bmp");
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
imshow("src", src);
Mat dst;
int flipCode[] = { 1, 0, -1 };
for (int i = 0; i < 3; i++) {
flip(src, dst, flipCode[i]);
String desc = format("flipCode: %d", flipCode[i]);
putText(dst, desc, Point(10, 30), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255, 0, 0), 1, LINE_AA);
imshow("dst", dst);
waitKey();
}
destroyAllWindows();
}
C++ Code 출처 : OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝 - 황선규 저







'OpenCV' 카테고리의 다른 글
ch09 edges (0) | 2024.05.20 |
---|---|
ch08 perspective (0) | 2024.05.20 |
ch07 sharpen (0) | 2024.05.20 |
ch07 noise (0) | 2024.05.20 |
ch07 filter (0) | 2024.05.20 |