이미지 읽고,처리,저장,보여주기(영상처리 기본)

OpenCV/example 2013. 6. 15. 12:42

stdafx.h

#include <iostream>


using namespace std;

stdOCV.h

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>


using namespace cv;

main.cpp

#include "stdafx.h"
#include "stdOCV.h"

int main()
{
Mat originImg, resultImg;
originImg = imread("lena.tif"); //읽기
//cvtColor(originImg,resultImg,CV_RGB2GRAY);//처리, 컬러->그레이
resultImg = ~originImg; //반전
imwrite("resulteImg.jpg", resultImg); //저장
imshow("resulteImg", resultImg); //보여주기
waitKey(0);
return 0;
}




반응형

프로그램 실행시간 측정

OpenCV/example 2013. 5. 20. 22:25

OpenCV


int64 startTime = getTickCount(); double frequency = getTickFrequency();

//처리할 프로그램 함수()

int64 endTime = getTickCount(); cout << (endTime - startTime) / frequency;


int64 t,tinit;

tinit = getTickCount();

//처리 함수()

t = getTickCount() - tinit;

반응형

[OpenCV]카메라 영상에서 특정값 검출(HSV컬러모델)

OpenCV/example 2013. 5. 10. 10:13

 

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace std;
using namespace cv;

 

int main()
{

VideoCapture camera(CV_CAP_ANY);
Mat input;
Mat output(Size(input.size().height,input.size().width),input.type());
Mat img_thresh(Size(640,480),input.type());

 

namedWindow("input",0);
namedWindow("output",0);

namedWindow("threshold",0);

 

Scalar hsv_min = cvScalar(70 , 100, 100, 0);

Scalar hsv_max = cvScalar(130, 255, 255, 0);

for(;;)
{

camera >> input;

cvtColor(input,output,CV_BGR2HSV,1);
inRange(output,hsv_min,hsv_max,img_thresh); 

imshow("input",input);
imshow("output",output);
imshow("threshold",img_thresh);

waitKey(30);    

}

 return 0;
}

반응형

[OpenCV]카메라 영상 출력

OpenCV/example 2013. 4. 4. 20:14

카메라 영상 출력하기

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <iostream>


using namespace std;

using namespace cv;


int main()

{

VideoCapture camera(CV_CAP_ANY);

if(!camera.isOpened())

return -1;

Mat result;


namedWindow("frame", CV_WINDOW_AUTOSIZE);

for(;;)

{

Mat frame;

camera >> frame; //get a new frame from camera.

result=frame.clone();

imwrite("camera.jpg",result);

imshow("frame", result);

if(waitKey(30) >= 0) break;

}

return 0;

}


반응형

[OpenCV #7]이진 영상 변환(threshold)

OpenCV/example 2013. 3. 4. 20:03

1.이진 영상 변환(hreshold( InputArray src, OutputArray dst,double thresh, double maxval, int type )

 

double threshold( InputArray src, OutputArray dst, double thresh, double maxval, int type )

src and dst : 입출력 영상

 

thresh : 경계값

 

maxval : 변환 후의 1을 max_val로 변환

단, 아래의 threshold_type값에만 적용

CV_THRESH_BINARY

CV_THRESH_BINARY_INV

CV_THRESH_OTSU

 

type : 경계값 설정 방법

CV_THRESH_BINARY

CV_THRESH_BINARY_INV

CV_THRESH_TRUNC

CV_THRESH_TOZERO

CV_THRESH_TOZERO_INV

CV_THRESH_OTSU

 

 

 

2.소스코드

#include<opencv\cv.h>
#include<opencv\highgui.h>

using namespace cv;
using namespace std;
int main()
{
 Mat image = imread("sistar.jpg",0);//CV_LOAD_IMAGE_GRAYSCALE=0, CV_LOAD_IMAGE_COLOR=1
 if(!image.data) return -1; //Check image
 
 Mat binary;
 threshold(image,binary,100,255,CV_THRESH_BINARY);

 imshow("binary",binary);
 waitKey(0); //Wait for keystroke
 return 0;

}


반응형

[OpenCV #6]split and merge

OpenCV/example 2013. 2. 20. 18:17

1.분리하고 통합

result - 원본 이미지를 RGB로 분리하고 Red와 Blue 채널을 바꿔, 통합한 결과

gray - 0.299*R + 0.587*G + 0.114*B 공식을 적용하여 gray이미지 출력

밑의 창들은 채널 분리한 결과

void split(const Mat& mtx, Vector<Mat>& mv)

mtx - the original color image

mv - the result set is 1-channel image

 

void merge(const Vector<Mat>& mv, Mat& dst)

mv - the original set of 1-channel image

dst - the resulting color image

 

2.소스코드

#include<opencv\cv.h>
#include<opencv\highgui.h>

using namespace cv;
using namespace std;
int main()
{
 Mat image = imread("sistar.jpg"); //Load image form disk
 if(!image.data) return -1; //Check image
 //Split the original image into three channels
 //channels[0],channels[1],channels[2]
 vector<Mat> channels;
 split(image,channels); //Partition image into three channel planes

 imshow("Red",channels[2]);
 imshow("Green",channels[1]);
 imshow("Blue",channels[0]);

 

 vector<Mat>channelslzm(3);
 //Changes the Red and Blue sites:
 channelslzm[0]=channels[2];
 channelslzm[1]=channels[1];
 channelslzm[2]=channels[0];
 Mat imagelzm;
 merge(channelslzm,imagelzm);
 imshow("Result",imagelzm);

 

 //Calculating the brightness according to the formula 0.299*R + 0.587*G + 0.114*B

 //(But, in fact, it's right to do woth cvtColor)
 Mat gray=0.299*channels[2]+0.587*channels[1]+0.114*channels[0];
 imshow("Gray",gray);
 waitKey(0); //Wait for keystroke
 return 0;

}


반응형

'OpenCV > example' 카테고리의 다른 글

[OpenCV]카메라 영상 출력  (0) 2013.04.04
[OpenCV #7]이진 영상 변환(threshold)  (0) 2013.03.04
[OpenCV #5]cv::Mat 클래스,복사,픽셀 접근  (0) 2013.02.19
[OpenCV #4]관심 영역  (0) 2013.02.14
[OpenCV #3]Threshold  (0) 2013.02.14

[OpenCV #5]cv::Mat 클래스,복사,픽셀 접근

OpenCV/example 2013. 2. 19. 14:01

Mat 클래스의 객체 정의

 

기본적으로 0x0의 크기를 갖는 영상 정의

#include<opencv\cv.h>

#include<opencv\highgui.h>

using namespace cv;
using namespace std;
int main()
{
 Mat image;
 
 cout<<"size:"<<image.size().height<<","<<image.size().width<<endl;
 
 return 0;

}

 

기본적으로 0x0의 크기를 갖지만, 초기 크기를 지정할 수 있다.

이미지 가로 세로, 값 0~255(8U = unsigned 8bit), graysccale(C1,1-channel)

 

#include<opencv\cv.h>
#include<opencv\highgui.h>

using namespace cv;
using namespace std;
int main()
{
 int w=150,h=100;
 Mat image(h,w,CV_8UC1);
 
 cout<<"size:"<<image.size().height<<","<<image.size().width<<endl;
 
 return 0;

}

 

그리고 색상 지정 및 이미지 보기

 

#include<opencv\cv.h>
#include<opencv\highgui.h>

using namespace cv;
using namespace std;
int main()
{
 int w=150,h=100;
 Mat image(h,w,CV_8UC1,Scalar(255));
 
 cout<<"size:"<<image.size().height<<","<<image.size().width<<endl;
 imshow("image",image);
 waitKey(0);
 return 0;

}

1-channel with the floating-point value(32F = float 32bit)

Mat imageFloat(h,w,CV_32FC1);

Scalar(255)

3-channel image with values 0~255 for each channel

Mat imageRGB(h,w,CV_8UC3)

Scalar(0,0,255)

 

Mat 클래스의 복사본

//colne() or copyTo() 복사함수

Mat B=image.clone();  //새로운 복사본 생성* colne()

 

Mat B;
image.copyTo(B); //* copyTo()

Mat B=image; //같은 데이터를 참조하는 두 영상

 

#include<opencv\cv.h>
#include<opencv\highgui.h>

using namespace cv;
using namespace std;
int main()
{

 Mat image = imread("sistar.jpg",0); //Load image form disk
 if(!image.data) return -1; //Check image
 
 //Mat B=image.clone(); //새로운 복사본 생성
 Mat B=image; //같은 데이터를 참조하는 두 영상
 threshold(B, B, 100, 255, CV_THRESH_BINARY);

 imshow("sistar", image); //Show image
 imshow("B", B); //Show image
 waitKey(0); //Wait for keystroke
 return 0;

} 

 

관심 영역 자르기

#include<opencv\cv.h>
#include<opencv\highgui.h>

using namespace cv;
using namespace std;
int main()
{

 Mat image = imread("sistar.jpg"); //Load image form disk
 if(!image.data) return -1; //Check image
 
 Rect rect(100,30,150,300);
 Mat subimage=image(rect);
 imshow("sistarROI",subimage); //Show image
 
 waitKey(0); //Wait for keystroke
 return 0;

}

 

//if you want to copy data:

image(rect).copyTo(subimage);

 

이미지 픽셀 접근하기

 

at을 이용한 1-채널 이미지 픽셀에 접근

//Get values

int value = image.at<uchar>(y,x);

//Set tje values

image.at<uchar>(y,x) = 100;

at을 이용한 3-채널 이미지 픽셀에 접근

//Get values

int value = image.at<Vec3b>(y,x)[c];

//Set tje values

image.at<Vec3b>(y,x)[c] = 100;

 

응용(영상 밝기 조정)

 

 

#include<opencv\cv.h>
#include<opencv\highgui.h>

using namespace cv;
using namespace std;
int main()
{
 double alpha=1.0;//1.0~3.0
 int beta=50;//0~100
 Mat image = imread("sistar.jpg"); //Load image form disk
 Mat new_image = Mat::zeros(image.size(),image.type());
 if(!image.data) return -1; //Check image
 
 
 for(int y = 0; y < image.rows; y++)
 {
  for(int x = 0;x < image.cols; x++)
  {
   for(int c = 0; c < 3; c++)
   {
    new_image.at<Vec3b>(y,x)[c]=
     saturate_cast<uchar>(alpha * (image.at<Vec3b>(y,x)[c]) + beta);
   }
  }
 }
 imshow("sistar",new_image); //Show image
 
 waitKey(0); //Wait for keystroke
 return 0;

}


반응형

'OpenCV > example' 카테고리의 다른 글

[OpenCV #7]이진 영상 변환(threshold)  (0) 2013.03.04
[OpenCV #6]split and merge  (0) 2013.02.20
[OpenCV #4]관심 영역  (0) 2013.02.14
[OpenCV #3]Threshold  (0) 2013.02.14
[OpenCV #2]이미지에서 RGB 채널 분리  (1) 2013.02.14

[OpenCV #4]관심 영역

OpenCV/example 2013. 2. 14. 19:19

1.관심 영역

2.Project.cpp

#include<opencv\cv.h>
#include<opencv\highgui.h>

using namespace cv;

int main()
{
     Mat image = imread("sistar.jpg"); //Load image form disk
     if(!image.data) return -1; //Check image
     //Cut of picture
     Rect rect = Rect(100, 30, 500, 100); //Rectangle cut
     Mat image3;
     image(rect).copyTo(image3); //Copy of the image

     //Change the part of the picture inside the picture
     image(rect) *= 2;
     imshow("image changed", image);
 
     waitKey(0); //Wait for keystroke
     return 0;

}


반응형

'OpenCV > example' 카테고리의 다른 글

[OpenCV #6]split and merge  (0) 2013.02.20
[OpenCV #5]cv::Mat 클래스,복사,픽셀 접근  (0) 2013.02.19
[OpenCV #3]Threshold  (0) 2013.02.14
[OpenCV #2]이미지에서 RGB 채널 분리  (1) 2013.02.14
[OpenCV #1]이미지 출력  (0) 2013.02.14

[OpenCV #3]Threshold

OpenCV/example 2013. 2. 14. 19:09

1.Threshold

2.Project.cpp

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main()
{
     Mat image = imread("sistar.jpg"); //Load image form disk
     if(!image.data) return -1; //Check image
     //Split the original image into three channels
     //channels[0],channels[1],channels[2]
     vector<Mat> channels;
     split(image, channels);

Mat image2;
threshold(channels[0], image2, 100, 255, CV_THRESH_BINARY);
imshow("Threadholded", image2);
waitKey(0); //Wait for keystroke
return 0;

}


반응형

[OpenCV #2]이미지에서 RGB 채널 분리

OpenCV/example 2013. 2. 14. 18:42

1.Allocation of channels Red, Green,  Blud

2.Project.cpp

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

using namespace cv;


void main() {


Mat image = imread("sistar.jpg"); //Load image form disk
if(!image.data) exit(1); //Check image
//Split the original image into three channels
//channels[0],channels[1],channels[2]
vector<Mat> channels;

split(image, channels); //Partition image into three channel planes

imshow("Red", channels[2]);

imshow("Green", channels[1]);

imshow("Blue", channels[0]);

waitKey(0); //Wait for keystroke


}


반응형

'OpenCV > example' 카테고리의 다른 글

[OpenCV #4]관심 영역  (0) 2013.02.14
[OpenCV #3]Threshold  (0) 2013.02.14
[OpenCV #1]이미지 출력  (0) 2013.02.14
[OpenCV]프로젝트 속성시트 가져오기[Tip]  (0) 2013.02.08
[OpenCV]Opencv 2.4.3 설치와 설정하기  (2) 2013.02.07