검색결과 리스트
글
[OpenCV #5]cv::Mat 클래스,복사,픽셀 접근
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 |