일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- MongoDB
- Machine Learning
- No SQL
- 김양재 목사
- 빅 데이타
- node.js
- 인공지능
- 데이터 과학
- 우리들교회
- nodeJS
- 통계
- 딥러닝
- WebGL
- Artificial Intelligence
- Deep learning
- 김양재
- 주일설교
- R
- c++
- 김양재 목사님
- 확률
- 빅데이타
- 빅 데이터
- 빅데이터
- openCV
- 몽고디비
- data science
- probability
- Big Data
- Statistics
Archives
- Today
- Total
Scientific Computing & Data Science
[OpenCV] 특정 픽셀 컬러 정보 얻어내기 본문
이번 포스팅에서는 OpenCV의 Mat class의 data pointer를 통해 특정 픽셀의 컬러 정보를 얻어오는 방법에 대해 알아보도록 하겠습니다.
1. 이미지를 로딩합니다.
1 2 | // Read an image cv::Mat image = cv::imread( YOUR_IMAGE_PATH, 1 ); | cs |
2. uchar 타입의 image data pointer를 얻어옵니다.
1 | uchar *data = image.data; | cs |
3. 마찬가지로 컬러 채널별로 uchar 타입을 선언합니다.
1 | uchar *blue, *green, *red; | cs |
4. 특정 픽셀 (j, i) 각 채널 데이터를 얻어옵니다.
1 2 3 | blue = image.data + j*image.step + i*image.elemSize() + 0; green = image.data + j*image.step + i*image.elemSize() + 1; red = image.data + j*image.step + i*image.elemSize() + 2; | cs |
Sample Code 1
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <iostream> #include <opencv2/opencv.hpp> #include <stdlib.h> #include <stdio.h> using namespace std; using namespace cv; void GetPixelData( cv::Mat image, uchar* blue, uchar* green, uchar* red, int j, int i ); /* @ function main */ int main( int argc, char** argv ) { // Read an image cv::Mat image = cv::imread( {YOUR_IMAGE_PATH}, 1 ); uchar *blue, *green, *red; blue = nullptr; green = nullptr; red = nullptr; // get (j,i) pixel : j-th row, i-th column pixel int j = 0; int i = 1; GetPixelData( image, blue, green, red, j, i ); return 0; } /* @function GetPixelData (j,i) */ void GetPixelData( cv::Mat image, uchar* blue, uchar* green, uchar* red, int j, int i ) { uchar *data = image.data; int nRow = image.rows; int nCol = image.cols; if( i > nCol - 1 || j > nRow - 1 ) { cout << "Selected pixel is out of range." << endl; return; } blue = image.data + j*image.step + i*image.elemSize() + 0; green = image.data + j*image.step + i*image.elemSize() + 1; red = image.data + j*image.step + i*image.elemSize() + 2; cout << "Red: " << (int)*red << " , Green: " << (int)*green << " , Blue: " << (int)*blue << endl; } | cs |
하지만 위의 방법보다 간단한 방법이 있는데, 픽셀로부터 직접 값을 얻어오는 방법입니다. 아마도 대부분의 개발자들은 이 방법을 선호할 것입니다.
Sample Code 2
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 | #include <iostream> #include <opencv2/opencv.hpp> #include <stdlib.h> #include <stdio.h> using namespace std; using namespace cv; /* @ function main */ int main( int argc, char** argv ) { // Read an image cv::Mat image = cv::imread( {YOUR_IMAGE_PATH}, 1 ); // get (j,i) pixel : j-th row, i-th column pixel int j = 0; int i = 1; // read a pixel from image directly int nBlue, nGreen, nRed; nBlue = 0; nGreen = 0; nRed = 0; nBlue = image.at<cv::Vec3b>(j,i)[0]; nGreen = image.at<cv::Vec3b>(j,i)[1]; nRed = image.at<cv::Vec3b>(j,i)[2]; cout << "Red : " << nRed << " , Green : " << nGreen << " , Blue : " << nBlue << endl; return 0; } | cs |
'Programming > OpenCV' 카테고리의 다른 글
[OpenCV] Gaussian Blur (4) | 2015.07.18 |
---|---|
[OpenCV] 원본 이미지 상에 컬러 입히기 (0) | 2015.07.08 |
[OpenCV] resize 함수를 이용하여 이미지 사이즈 조정하기 (0) | 2015.04.01 |
[OpenCV] Camera Frame Capture (0) | 2015.03.31 |
[OpenCV] Image Pyramid (0) | 2015.03.24 |
Comments