Programming/Image Processing 12

[OpenCV] IplImage 이미지 회전 함수구현

이미지의 Channel에 따라서 if문을 사용유무를 결정하면 된다. 그리고 이미지 단순 회전은 cv2DRotationMatrix 함수에서 90-degree → degree로 변환하면 된다. 123456789101112131415161718void rotateImage(const IplImage* src, IplImage* dst, double degree){ // Only 1-Channel if(src->nChannels != 1) return; CvPoint2D32f centralPoint = cvPoint2D32f(src->width/2, src->height/2); // 회전 기준점 설정(이미지의 중심점) CvMat* rotationMatrix = cvCreateMat(2, 3, CV_32FC1);..

[OpenCV] 가장 긴 직선의 각도를 반환하는 함수(소스코드)

때로는 이미지나 영상에서 가장 긴 직선이 이미지 회전의 기준이 되기도 한다. Hough Transform을 이용하여 직선성분을 검출한다.검출된 직선 중 가장 긴 직선을 기준으로 회전된 각도를 반환한다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556double getRotationAngle(const IplImage* src){ // Only 1-Channel if(src->nChannels != 1) return 0; // 직선이 잘 검출될 수 있도록 팽창 cvDilate((IplImage*)src, (IplImage*)src); // 저장영역 생성 CvMemStor..

[OpenCV] 이미지 로드 + 출력예제 소스코드

1234567891011121314151617181920#include #include using namespace std;using namespace cv; int main(void){ char* imagename = "circuit/b.jpg"; IplImage* circuit = cvLoadImage(imagename, CV_LOAD_IMAGE_COLOR); cvNamedWindow("Circuit", 1); cvShowImage("Circuit", circuit); // "Circuit" 이름과 동일한 Window에 circuit 이미지를 띄움 cvWaitKey(0); // 키 입력을 기다리며 사진을 보여줌 cvDestroyWindow("Circuit"); // 윈도우 해제 cvReleaseIma..

[OpenCV] Labeling 응용(가장 많은 화소 Label만 남기기) Source Code

OpenCV의 Mat Format을 사용한 Source Code 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121void extractMainLabel(Mat input, int row, int col){ int x, y, top; short l_no = 0, r, c, m, n; unsigned cha..

[OpenCV] 2.4 이상 버전에서 SIFT + SURF 사용 설정

OpenCV 2.4 버전 이상부터 저작권 문제로 SIFT, SURF 모듈이 non-free 모듈로 이동 1. [프로젝트 속성]→[구성 속성]→[링커]→[추가 종속성]입력: opencv_nonfree248d.lib(※자신의 버전에 따라 nonfree248→nonfree244가 될 수도 있음) 2. [프로젝트 속성]→[구성 속성]→[VC++ 디렉터리]→[포함 디렉터리]입력: C:\opencv\build\include\opencv2\nonfree 3. SIFT, SURF를 사용하기 전에 헤더파일 등록: #include 본문 입력: cv::initModule_nonfree(); (non-free 모듈을 사용가능하게 만들어주는 것) ※ 상용화는 저작권때문에 안되고 연구, 공부용으로만 사용가능합니다.

[OpenCV] Labeling(레이블링, 라벨링) 이론 및 소스코드

OpenCV IplImage를 사용해서 Labeling 함수 구현 1. Labeling이란? 우선 1-channel의 gray scale 영상이 필요합니다. 이진화된 아래의 이미지처럼 0 or 255(1-channel)의 값을 갖을 경우 인접한 영역끼리 그룹을 짓는 것을 Labeling(레이블링)이라고 합니다.[그림 1] 아래의 그림처럼 인접 영역끼리 label Number를 매겨 그룹화를 하게됩니다. [그림 2] 여기서 인접한 pixel을 탐색할 때 8-neighbor 방식을 사용하였습니다. neighbor는 '이웃'이라는 뜻처럼 8-neighbor는 현재 pixel을 기준으로 몇 개의 이웃 pixel들을 탐색하는지를 뜻합니다. 아래의 왼쪽 그림은 현재 pixel을 기준으로 위, 아래, 왼쪽, 오른쪽 ..

배열접근방식 세선화(Thinning) 함수 소스코드

호출방법: Thinning(&배열이름, 행의 수, 열의 수); Colored By Color Scripter™123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137void Thinning(unsigned char *arr, ..

[OpenCV] Mat을 이용한 Thinning(세선화) 구현

특징점 추출이나 패턴인식을 위해 많이 쓰이는 전처리 작업인 Thinning이다.'Skeletonization'이라는 이름으로도 불리기도 한다. 이진화된 사진이나 영상의 골격을 추출하는 기법이다.OpenCV에서 라이브러리로 제시된 것이 없어 구현하였다.함수 호출은Thinning(cv::Mat, cv::Mat.rows, cv::Mat.cols);위와 같이 하면된다. cv::Mat → Mat 변수의 이름cv::Mat.rows → Mat 행의 수cv::Mat.cols → Mat 열의 수 [입력 이미지]위와 같이 이진화된 회로사진이 있을 때 세선화한다.1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950..

[OpenCV] Edge Detection(Canny Filter) 사용하기 예제

[원본 이미지] [Source code]Colored By Color Scripter™1234567891011121314151617181920212223242526#include #include using namespace cv;using namespace std; int main(void){ // Original Image Mat image = imread("circuit/c.jpg", CV_LOAD_IMAGE_COLOR); imshow("Original image", image); // Original Image to Gray Image Mat gray; cvtColor(image, gray, CV_BGR2GRAY); // Canny Filter Mat canny; Canny(gray, canny, ..

[OpenCV] Edge detection(Sobel Filter) 사용하기 예제

[원본 이미지][Sobel Filter를 이용하여 에지검출 Source code(C++)]Colored By Color Scripter™123456789101112131415161718192021222324252627282930#include #include using namespace cv;using namespace std; int main(void){ // Original Image Mat image = imread("circuit/c.jpg", CV_LOAD_IMAGE_COLOR); imshow("Original image", image); // Original Image to Gray Image Mat gray; cvtColor(image, gray, CV_BGR2GRAY); // Sobel F..