일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 딥러닝
- object detection
- convexhull
- tokenizing
- #실생활영어
- 영어명언
- #실생활 영어
- #영어 명언
- text2img
- 영어
- #English
- python __init__
- #opencv
- word embedding
- findContours
- Convolution Neural Network
- TensorFlow
- python list
- c언어
- #1일1영어
- 완전탐색
- keras
- 이미지 생성
- tensorflow update
- python 알고리즘
- #Android
- #영어
- opencv SURF
- #일상영어
- #프로젝트
Archives
- Today
- Total
When will you grow up?
5. ColorReduction 만들기. 본문
ColorReduction ->말 그대로 컬러 이미지에서 색상 감축을 위하여 쓰는 알고리즘 입니다.
해당 중요 함수 부분입니다.
cv::Mat myColorReduction(Mat &srcImg, int cw)
{
Mat_<Vec3b> destImg = Mat_<Vec3b> (srcImg.clone());
for (int r = 0; r < srcImg.rows; r++)
{
for (int c = 0; c < srcImg.cols; c++)
{
Vec3b rgb = destImg(r,c);
for (int k = 0; k < 3; k++)
{
rgb[k] = int(rgb[k] / cw) * cw;
}
destImg(r, c) = rgb;
}
}
return destImg;
}
이중포문을 사용하여 전체 이미지를 스캔하고
가로 픽셀수와 세로픽셀수를 얻기위해 rows 과 cols을 이용한다.
rgb[k] = int(rgb[k] / cw) * cw;
이부분에서
흑백일경우는 상관이 없지만 컬러 이미지 이므로 R G B가 존재 하므로 이를 처리하기 위해서 나눈후에 다시 곱하므로 기존값에 나머지를 뺀 값이 남게 된다.
예를들어 1024엿을경우 100으로 나누고 100을 다시 곱하게 되면 : 1000의 값이 나오게 됨
결과입니다.
왼쪽이 원본 이미지 오른쪽이 reduction된 이미지.
전체 코드는 아래와 같습니다.
#include "ofApp.h" const int width = 720; const int height = 480; unsigned char pixel[width*height * 3]; ofImage img, result; ofImage photo; Mat srcImg; cv::Mat myColorReduction(Mat &srcImg, int cw) { Mat_destImg = Mat_ (srcImg.clone()); for (int r = 0; r < srcImg.rows; r++) { for (int c = 0; c < srcImg.cols; c++) { Vec3b rgb = destImg(r,c); for (int k = 0; k < 3; k++) { rgb[k] = int(rgb[k] / cw) * cw; } destImg(r, c) = rgb; } } return destImg; } //-------------------------------------------------------------- void ofApp::setup() { photo.load("myimage2.jpg"); srcImg = Mat(photo.getHeight(),photo.getWidth(),CV_8UC3,photo.getPixels().getData()); Mat colorReduced = myColorReduction(srcImg, 64); //이렇게 100으로 나누면 27가지 컬러 표현이 가능하다 imshow("colorReduction", colorReduced); } //-------------------------------------------------------------- void ofApp::update() { photo.update(); } //-------------------------------------------------------------- void ofApp::draw() { photo.draw(100, 100); //result.draw(photo.getWidth() + 100, 100); } //-------------------------------------------------------------- void ofApp::keyPressed(int key) { } //-------------------------------------------------------------- void ofApp::keyReleased(int key) { } //-------------------------------------------------------------- void ofApp::mouseMoved(int x, int y) { } //-------------------------------------------------------------- void ofApp::mouseDragged(int x, int y, int button) { } //-------------------------------------------------------------- void ofApp::mousePressed(int x, int y, int button) { } //-------------------------------------------------------------- void ofApp::mouseReleased(int x, int y, int button) { } //-------------------------------------------------------------- void ofApp::mouseEntered(int x, int y) { } //-------------------------------------------------------------- void ofApp::mouseExited(int x, int y) { } //-------------------------------------------------------------- void ofApp::windowResized(int w, int h) { } //-------------------------------------------------------------- void ofApp::gotMessage(ofMessage msg) { } //-------------------------------------------------------------- void ofApp::dragEvent(ofDragInfo dragInfo) { }
'02. Study > Computer Vision(openframworks&opencv)' 카테고리의 다른 글
7.LinearBlending(이미지 블랜딩) (0) | 2016.09.23 |
---|---|
6. LUT를 이용한 속도 비교(ColorReduction / ColorReductionLUT) (0) | 2016.09.17 |
4. BitPlane 함수 만들기(Bit-Plane Slicing) (0) | 2016.09.17 |
3.blur()를 이용해 이미지 처리후 이미지 키보드 버튼을 이용해 이미지 저장. (2) | 2016.09.10 |
2.visualstdio2015에서 opencv+openframeworks 개발환경 구축 (22) | 2016.09.08 |
Comments