When will you grow up?

3.blur()를 이용해 이미지 처리후 이미지 키보드 버튼을 이용해 이미지 저장. 본문

02. Study/Computer Vision(openframworks&opencv)

3.blur()를 이용해 이미지 처리후 이미지 키보드 버튼을 이용해 이미지 저장.

미카이 2016. 9. 10. 12:52

기본적으로 들어가기 전에 저희는 Mat 데이터 구조에 대해 알아보겠습니다


Mat? (mat data structure)


OpenCV c++ n-차원 밀집형 배열 클래스

->기본 데이터형 외에도 openCV 에서 정의한 다양한 데이터 등을 포함시켜 만들수 있는 데이터 형


cv::Mat cvImg;

cv::Mat cvCloneImg;


등등등 이러한 형식 외에도 많은 template 형식으로 사용할수 있다.




blur()함수를 이용하여 이미지 blur 효과를 확인해보겠다

일단 

blur 함수의 원형은 다음과 같다.


void blur( InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType = BORDER_DEFAULT )


OpenCV함수는 nomalized box filter(Homogeneous Smoothig)을 사용하여 이미지를 부드럽게 한다. nomalized box filter (kernel)은 이미 설명하였다. 입력 이미지의 모든 채널은 독립적으로 작업된다. (is proccessed)


    • src 원본 이미지 (원본 이미지의 심도는 다음중 하나의 값이어야 한다; CV_8U, CV_16S, CV_16U, CV_32F or CV_64F)
    • dst 출력 이미지 (입력이미지와 같은 크기 같은 심도를 갖는다)
    • ksize 커널의 크기
    • anchor - Point(-1,-1) 값은 앵커(anchor)가 커널의 중앙에 위치 한다는 것을 의미한다. 사용자가 원하면 위치를 지정 할 수 있따.
    •  borderType 사용자는 다양한 경계선(border) 보간(interpolation)메서드를 정의 할 수 있다. 적용값은 경계선의 픽셀에만 적용된다. (사용자는 다음값들을 사용 할 수 있다; BORDER_DEFAULT, BORDER_REFLECT, BORDER_REPLICATE, BORDER_TRANSPARENT, BORDER_REFLECT_101 )


   blur를 이용한 원본 이미지와 비교!


kernel size를 10,10 으로 주고 테스트 해본 결과 입니다. size값이 증가하면 증가할수록 blur처리가 많이 들어감니다.





그리고 아래 는 전체 소스 코드 입니다.

기본적으로 's' 버튼을 누르면 이미지 저장이 되게 만들었으며,

photo.save("photo - blur.bmp");

함수에서 이름 및 확장자 명을 이용하여 저장시킬 수 있으며,

저장 위치는 프로젝트 -> bin ->data에 저장 됩니다.



#include "ofApp.h"

const int width = 720;
const int height = 480;
unsigned char pixel[width*height * 3];
ofImage img, result;
ofImage photo;

//--------------------------------------------------------------
void ofApp::setup() {
	photo.load("myimage.jpg");
	result.clone(photo);
	cvImg = cv::Mat(photo.getHeight(), photo.getWidth(), CV_8UC3,
		photo.getPixels().getData());
	cvCloneImg = cv::Mat(photo.getHeight(), photo.getWidth(), CV_8UC3,
		photo.getPixels().getData());
	cv::blur(cvCloneImg, cvCloneImg, cv::Size(10, 10)); //src, dst, kernel size
	
														
												

}

//--------------------------------------------------------------
void ofApp::update() {
	photo.update();

}

//--------------------------------------------------------------
void ofApp::draw() {
	photo.draw(100, 100);
	result.draw(photo.getWidth() + 100, 100);
}

//--------------------------------------------------------------
void ofApp::keyPressed(int key) {
	switch (key)
	{
	case 's':
		photo.save("photo - blur.bmp");
		break;
	}
}

//--------------------------------------------------------------
void ofApp::keyReleased(int key) {

}

//--------------------------------------------------------------
void ofApp::mouseMoved(int x, int y) {

}

//--------------------------------------------------------------
void ofApp::mouseDragged(int x, int y, int button) {

}

//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button) {

}

//--------------------------------------------------------------
void ofApp::mouseReleased(int x, int y, int button) {

}

//--------------------------------------------------------------
void ofApp::mouseEntered(int x, int y) {

}

//--------------------------------------------------------------
void ofApp::mouseExited(int x, int y) {

}

//--------------------------------------------------------------
void ofApp::windowResized(int w, int h) {

}

//--------------------------------------------------------------
void ofApp::gotMessage(ofMessage msg) {

}

//--------------------------------------------------------------
void ofApp::dragEvent(ofDragInfo dragInfo) {

}





Comments