목록OpenCV(C++) (11)
Creative Code
※Chapter15.cpp 파일 #pragma once #include using namespace std; using namespace cv; //스마트 포인터 (객체가 사라지면 스스로 사라지는 포인터) static cv::Ptrtrain_knn() { cv::Mat digits = cv::imread("digits.png", cv::IMREAD_GRAYSCALE); if (digits.empty()) return nullptr; cv::Mat train_images; cv::Mat train_labels; for (int i = 0; i < 50; i++) { for (int j = 0; j < 100; j++) { cv::Mat roi = digits(cv::Rect(j * 20, i * 20, 2..
※Chapter11.cpp파일 #pragma once #include using namespace std; using namespace cv; //trackbar를 사용한 영상의 이진화 함수(threshold방식) static void on_threshold(int position, void* userdata) { Mat src = *(static_cast(userdata)); Mat dst; threshold(src, dst, position, 255.0, THRESH_BINARY); //THRESH_BINARY 방식을 사용 imshow("DST", dst); } static void on_trackbar(int position, void* userdata) { Mat src = *(static_cas..
※Chapter10.cpp파일 #pragma once #include using namespace std; using namespace cv; //이미지에서 Red, Blue, Green 성분만 불러 grayscale로 읽기 void show_BGR_channels() { Mat src = imread("candies.png", IMREAD_COLOR); // 356 * 493 Mat B(src.size(), CV_8UC1); // Blue 색상만 가져오기 때문에 채널이 1개 Mat G(src.size(), CV_8UC1); Mat R(src.size(), CV_8UC1); for (int i = 0; i < src.rows; ++i) { for (int j = 0; j < src.cols; ++j) {..
※Chapter9.cpp파일 #pragma once #include using namespace std; using namespace cv; //소벨마스크 기준 에지 검출 함수 void sobel_edge() { Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE); if (src.empty()) return; Mat dx; Mat dy; Sobel(src, dx, CV_32FC1, 1, 0); // X로 미분 Sobel(src, dy, CV_32FC1, 0, 1); // Y로 미분 imshow("SRC", src); imshow("DX", dx); imshow("DY", dy); Mat mag; magnitude(dx, dy, mag); // c++ float -> im..
※Chapter8.cpp파일 #pragma once #include using namespace std; using namespace cv; //affine 변환행렬 함수 void affine_transform() { Mat src = imread("tekapo.bmp"); if (src.empty()) return; //처음 세점의 좌표와 해당 점들이 변환이동된 각각의 좌표를 가지고 affine행렬을 구한다. 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..
※Chapter7.cpp파일 #pragma once #include using namespace std; using namespace cv; //엠보싱 필터링 함수(객체의 윤곽을 올록볼록한 형태로 만들기) void filter_embossing() { Mat src = imread("rose.bmp", IMREAD_GRAYSCALE); if (src.empty()) return; float filter_data[] = { -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f }; Mat emboss_kernel(3, 3, CV_32FC1, filter_data); Mat dst; filter2D(src, dst, -1, emboss_kernel, Point(..