dev-logs
3. MFC를 이용한 viewer 만들기_RGB를GRAY로 본문
이미지파일 불러오는 걸 이전까지 했는데요.
이번에는 불러온 rgb이미지를 gray이미지로 변환하는 걸 구현하겠습니다.
메뉴에 Convert Gray 항목을 추가했구요, 우클릭해서 이벤트를 추가합니다.
잘못캡쳐됐는데, 클래스목록은 CViewerDlg로 놓고 추가해주세요~!
저는 함수이름도 OnConvertgrayBtnClick() 으로 변경했습니다.
RGB는 한픽셀당 3비트인데 각각의 비트에는 B, G, R 순서대로 값이 들어갑니다.
gray로 바꾸는 부분에 for문 안에서 rgb 값을 정의해줄때 rgb 구조를 잘 생각할것!
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 | void CViewerDlg::OnConvertgrayBtnClick() { if (InpImg.data != NULL) { //변환한 gray이미지를 담을 공간 할당하기 GrayImg = new unsigned char*[InpImg.rows]; for (int h = 0; h < InpImg.cols; h++) { GrayImg[h] = new unsigned char[InpImg.cols]; } // gray로 바꾸기 for (int h = 0; h < InpImg.rows; h++) { for (int w = 0; w < InpImg.cols; w++) { unsigned char r, g, b; r = InpImg.at<unsigned char>(h, w * 3 + 2); g = InpImg.at<unsigned char>(h, w * 3 + 1); b = InpImg.at<unsigned char>(h, w * 3); //bgr순서이다. 한픽셀당 3비트여서 곱하기3 GrayImg[h][w] = 0.299 *r + 0.587*g + 0.114*b; } } //Display OutImg = Mat(InpImg.cols, InpImg.rows, CV_8UC1); for(int h = 0; h < OutImg.rows; h++) { for (int w = 0; w < InpImg.cols; w++) { GrayImg[h][w] = OutImg.at<unsigned char>(h, w); } } for (int n = 0; n < InpImg.rows; n++) { delete[]GrayImg[n]; } delete[] GrayImg; imshow("OutImg", OutImg); } } | cs |
먼저 File Open 에서 파일을 불러온뒤 gray로 변환한 결과화면입니다.
'공부 > 영상처리' 카테고리의 다른 글
[이미지포맷변환] yuv422 to gray (0) | 2018.07.17 |
---|---|
카메라에서 frame 들어오는 속도 확인하는 법 (0) | 2018.01.19 |
2. MFC를 이용한 viewer 만들기_jpg 불러오기 (1) | 2017.12.15 |
1. opencv 3.0 설치 및 세팅 (0) | 2017.12.15 |
[Android] Android에서 카메라로 동영상 녹화하기-외부저장소에 접근 (0) | 2017.12.07 |
Comments