일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- python 알고리즘
- #영어
- text2img
- python list
- #일상영어
- #1일1영어
- #opencv
- #English
- c언어
- TensorFlow
- 영어명언
- convexhull
- word embedding
- findContours
- 이미지 생성
- #프로젝트
- 영어
- object detection
- #실생활영어
- python __init__
- 완전탐색
- Convolution Neural Network
- 딥러닝
- #영어 명언
- opencv SURF
- #Android
- tokenizing
- tensorflow update
- #실생활 영어
- keras
- Today
- Total
When will you grow up?
9.Image Histogram만들기 & GaussianBlur를 적용시킨 Histogram 본문
9.Image Histogram만들기 & GaussianBlur를 적용시킨 Histogram
미카이 2016. 9. 23. 16:47히스토그램(Histogram)?
->데이터의 특징을 한 눈에 관찰하기 쉽도록 빈도수에 따라 표현한 그래프 이다.
void calcHist(const Mat * image,
int nimages, //소스이미지 갯수
const int * channels, //사용될 채널 리스트
InputArray mask, //마스크 이미지-옵션
OutputArray hist, //출력
int dims, //몇차원?
const int* histSize, //히스토그램 사이즈 array
const float** ranges,//차원의 경계 array
bool uniform = true,//균일 여부를 결정하는 flag
bool accumulate = false//축적 여부를 결정하는 flag
};
원형은 위와 같다. 하지만 이 caclHist함수를 이용하지않고
그려볼 예정입니다.
for (int i = 0; i < InImage.rows; i++)
{
for (int k = 0; k < InImage.cols; k++)
{
Vec3b pixel2 = InImage.at<Vec3b>(i, k);
for (int b = 0; b < 3; b++)
{
for (int y = 0; y < 256; y++)
{
if ((unsigned int)pixel2[0] == y)
{
histoB[y]++;
}
if ((unsigned int)pixel2[1] == y)
{
histoG[y]++;
}
if ((unsigned int)pixel2[2] == y)
{
histoR[y]++;
}
}
}
}
}
for문을 돌아 현재 이미지 사이즈 만큼 돌며 각 픽셀값의 값을 추출해 내며 RGB배열에 각각 담슴니다.
for (int i = 0; i < 256; i++)
{
line(R_src, cvPoint(i, 400+i), cvPoint(i, histoR[i]), CV_RGB(255, 0, 0));
}
imshow("R", R_src);
for (int i = 0; i < 256; i++)
{
line(G_src, cvPoint(i, 400 + i), cvPoint(i, histoG[i]), CV_RGB(0, 255, 0));
}
imshow("G", G_src);
for (int i = 0; i < 256; i++)
{
line(B_src, cvPoint(i, 400 + i), cvPoint(i, histoB[i]), CV_RGB(0, 0, 255));
}
imshow("B", B_src);
그리고 출력 부분에서 opencv line함수를 이용하여 각각 초기위치부터 돌면서 그래프를 표현 합니다.
이때 400으로 값은이유는 왼쪽상단이 (0,0) 인데 이것을 아래방향으로 맞춰주기 위해서 반대로 돌림니다.
이미지 크기는 400 * 400 입니다.
위사진은 원본이미지 데이터를 RGB 색상으로 각각 뽑아냈을경우
GaussianBlur를 적용시킨후 Histogram으로 뽑아냈을경우
이 GaussianBlur는 이 앞장에 블로그 포스팅이 잘되어있는 글을 담아와 사용했습니다.
0~255까지 데이터 값을 한눈에 알아볼수있어서 히스토그램은 편리한거 같습니다.
'02. Study > Computer Vision(openframworks&opencv)' 카테고리의 다른 글
10.bilateralFilter를 이용한 이미지 처리. (0) | 2016.09.29 |
---|---|
GaussianBlur 를 이용한 이미지 필터링 (0) | 2016.09.24 |
7.LinearBlending(이미지 블랜딩) (0) | 2016.09.23 |
6. LUT를 이용한 속도 비교(ColorReduction / ColorReductionLUT) (0) | 2016.09.17 |
5. ColorReduction 만들기. (0) | 2016.09.17 |