컬러 감축

OpenCV/이미지 처리 2013. 9. 2. 16:03


#include <iostream>


#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

using namespace cv;

using namespace std;


// .ptr와 [] 사용하기(.at보다 빠름)

void colorReduce(Mat &image, int div=64) {

int nl= image.rows; // 행 개수

int nc= image.cols * image.channels(); // 각 행에 있는 원소의 총 개수


for (int j=0; j<nl; j++) {

uchar* data= image.ptr<uchar>(j);

for (int i=0; i<nc; i++) {

data[i]= data[i]/div*div + div/2;

}    

}

}


void main()

{

Mat image;

int64 t, tinit;

image= imread("image.jpg");

if (!image.data) {

cerr<<"Error: 이미지 파일을 읽을 수 없습니다!!"<<endl;

exit(1);

}

imshow("original", image);

tinit = getTickCount();

colorReduce(image);

t = getTickCount() - tinit;

cout << "using .ptr and [] =" << 1000.*t/getTickFrequency() << "ms" << endl;

imshow("color reduce", image);

waitKey(0);

}






반응형

이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold()

OpenCV/이미지 처리 2013. 5. 21. 00:08

이미지 이진화

#include <iostream>

#include <opencv2/core/core.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/highgui/highgui.hpp>

using namespace cv;


int main()

{

Mat gray_img = imread("lena.tif", 0);

if (!gray_img.data) return -1; 


// 고정 임계 값 처리

Mat bin_img, bininv_img, trunc_img, tozero_img, tozeroinv_img;

// 입력 이미지 출력 이미지, 임계 값, maxVal, 임계 값 처리 방법

threshold(gray_img, bin_img, 0, 255, THRESH_BINARY | THRESH_OTSU);

threshold(gray_img, bininv_img, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);

threshold(gray_img, trunc_img, 0, 255, THRESH_TRUNC | THRESH_OTSU);

threshold(gray_img, tozero_img, 0, 255, THRESH_TOZERO | THRESH_OTSU);

threshold(gray_img, tozeroinv_img, 0, 255, THRESH_TOZERO_INV | THRESH_OTSU);


// 적응적인 임계 값 처리

Mat adaptive_img;

// 입력 이미지 출력 이미지 maxVal, 임계 값 결정 방법, 임계 값 처리 방법, blockSize, C

adaptiveThreshold (gray_img, adaptive_img, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 7, 8);


// 결과 이​​미지보기

namedWindow("Binary",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow("Binary Inv",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow("Trunc",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow("ToZero",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow("ToZero Inv",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow("Adaptive",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

imshow("Binary",bin_img);

imshow("Binary Inv",bininv_img);

imshow("Trunc",trunc_img);

imshow("ToZero",tozero_img);

imshow("ToZero Inv",tozeroinv_img);

imshow("Adaptive",adaptive_img);


waitKey(0);

return 0;

}


반응형

'OpenCV > 이미지 처리' 카테고리의 다른 글

컬러 감축  (0) 2013.09.02
이미지 반전  (0) 2013.05.21
이미지 뒤집기_flip()  (0) 2013.05.21
이미지 크기 조정_resize()  (0) 2013.05.20
컬러공간 변환_cvtColor()  (0) 2013.05.20

이미지 반전

OpenCV/이미지 처리 2013. 5. 21. 00:04

이미지 반전

#include <iostream>

#include <opencv2/core/core.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/highgui/highgui.hpp>

using namespace cv;


int main() {

Mat src_img = imread("lena.tif", 1);

if (!src_img.data) return -1; 


// NOT 연산

Mat dst_img = ~src_img;


namedWindow("src image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow("dst image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

imshow("src image",src_img);

imshow("dst image",dst_img);


waitKey(0);

return 0;

}


반응형

이미지 뒤집기_flip()

OpenCV/이미지 처리 2013. 5. 21. 00:03

이미지 뒤집기

#include <iostream>

#include <opencv2/core/core.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/highgui/highgui.hpp>

using namespace cv;


int main()

{

Mat src_img = imread("lena.tif", 1);

if (!src_img.data) return -1; 


Mat dst_img1;

Mat dst_img2(src_img.rows * 0.5, src_img.cols * 2.0, src_img.type ());


Mat v_img, h_img, b_img;

flip(src_img, v_img, 0); // 수평으로 반전 (수직 반전)

flip(src_img, h_img, 1); // 수직으로 반전 (수평 반전)

flip(src_img, b_img, -1); // 두 축으로 반전 (수직 반전 + 수평 반전)


namedWindow("vertical flip image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow("horizo​​ntal flip image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow("both flip image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

imshow("vertical flip image",v_img);

imshow("horizo​​ntal flip image",h_img);

imshow("both flip image",b_img);


waitKey(0);

return 0;

}


반응형

이미지 크기 조정_resize()

OpenCV/이미지 처리 2013. 5. 20. 23:59

이미지 크기 조정

#include <iostream>

#include <opencv2/core/core.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/highgui/highgui.hpp>

using namespace cv;


int main()

{

Mat src_img = imread("lena.tif", 1);

if (!src_img.data) return -1; 


Mat dst_img1;

Mat dst_img2(src_img.rows * 0.5, src_img.cols * 2.0, src_img.type ());


// INTER_LINER (이중 선형 보간)의 크기 변경

resize (src_img, dst_img1, cv :: Size (), 0.5, 0.5);

// INTER_CUBIC (바이 큐빅 보간)의 크기 변경

resize (src_img, dst_img2, dst_img2.size(), INTER_CUBIC);


namedWindow ( "resize image1",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow ( "resize image2",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

imshow ( "resize image1",dst_img1);

imshow ( "resize image2",dst_img2);



waitKey(0);

return 0;

}


반응형

'OpenCV > 이미지 처리' 카테고리의 다른 글

이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold()  (0) 2013.05.21
이미지 반전  (0) 2013.05.21
이미지 뒤집기_flip()  (0) 2013.05.21
컬러공간 변환_cvtColor()  (0) 2013.05.20
단색 채우기  (0) 2013.05.20

컬러공간 변환_cvtColor()

OpenCV/이미지 처리 2013. 5. 20. 23:55

컬러공간 변환

#include <iostream>

#include <opencv2/core/core.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/highgui/highgui.hpp>

using namespace cv;


int main()

{

Mat bgr_img = imread ( "lena.tif", 1);

if (!bgr_img.data) return -1; 


Mat dst_img;


// BGR -> HSV

cvtColor (bgr_img, dst_img, CV_BGR2HSV);

imshow("BGR -> HSV",dst_img);

// BGR -> Lab

cvtColor (bgr_img, dst_img, CV_BGR2Lab);

imshow("BGR -> Lab",dst_img);


// BGR -> YCrCb

cvtColor (bgr_img, dst_img, CV_BGR2YCrCb);

imshow("BGR -> YCrCb",dst_img);

  // BGR -> XYZ

cvtColor(bgr_img, dst_img, CV_BGR2XYZ);

imshow("BGR -> XYZ",dst_img);

waitKey(0);

return 0;

}

반응형

'OpenCV > 이미지 처리' 카테고리의 다른 글

이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold()  (0) 2013.05.21
이미지 반전  (0) 2013.05.21
이미지 뒤집기_flip()  (0) 2013.05.21
이미지 크기 조정_resize()  (0) 2013.05.20
단색 채우기  (0) 2013.05.20

단색 채우기

OpenCV/이미지 처리 2013. 5. 20. 23:51

색칠

#include <iostream>

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

using namespace cv;


int main()

{

// 초기화시에 칠

Mat red_img(Size(640, 480), CV_8UC3, Scalar(0,0,255));

Mat white_img(Size(640, 480), CV_8UC3, Scalar::all(255));

Mat black_img = Mat::zeros(Size (640, 480), CV_8UC3); 


// 초기화 후 채우기

Mat green_img = red_img.clone();

green_img = Scalar(0,255,0);


namedWindow("red image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow("white image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow("black image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

namedWindow("green image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);

imshow("red image",red_img);

imshow("white image",white_img);

imshow("black image",black_img);

imshow("green image",green_img);

waitKey(0);

return 0;

}



반응형