게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
안녕하세요 영상처리를 공부하고 있는 학생입니다. c++코드관련 질문좀..
게시물ID : programmer_1875짧은주소 복사하기
작성자 : 경기수원
추천 : 0
조회수 : 445회
댓글수 : 7개
등록시간 : 2014/03/16 21:11:58
BYTE R,G,B,GRAY;

if(BmInfo.bmiHeader.biBitCount == 24)
{
for(i=0;i<BmInfo.bmiHeader.biHeight;i++)
{
for(j=0;j<BmInfo.bmiHeader.biWidth;j++)
{
R =  *(lpVHdr->lpData+(i*3)+2);
G =  *(lpVHdr->lpData+(i*3)+1);
B =  *(lpVHdr->lpData+(i*3)+0);
GRAY = (BYTE)(0.299*R + 0.587*G + 0.114*B);

if(GRAY > 100) GRAY = 255;
else GRAY = 0;

*(temp+i*BmInfo.bmiHeader.biWidth*3+j*3+0) =*(temp+i*BmInfo.bmiHeader.biWidth*3+j*3+1)= *(temp+i*BmInfo.bmiHeader.biWidth*3+j*3+2) = GRAY;
}
}
}
캠에서 컬러영상을 받아서 그 값을 r,g,b로 분리시킨다음 영상에서 가져온 r,g,b 값을 1차적으로 grayscale화 시킨뒤 GRAY라는 변수에 값을 저장해두고
이진화를 시켜서 일정값 이상일경우 흑 일정값 이하일 경우 백으로 표현하려고합니다. 알고리즘이 끝나고나면
temp라는 포인터배열을 사용하여 출력하는 부분인데 흑과 백은 어차피 000 아니면 255255255 두가지밖에 없으니까
*(temp+i*BmInfo.bmiHeader.biWidth*3+j*3+0) =*(temp+i*BmInfo.bmiHeader.biWidth*3+j*3+1)
= *(temp+i*BmInfo.bmiHeader.biWidth*3+j*3+2) = GRAY; 
이런식으로 표현하였습니다. 근데여기서 궁금한점은 캠을 출력하면 원본영상부분에서는 문제없이 인식이되는데
제가 이진화알고리즘을 넣고 돌린 영상쪽에서는 어두운 부분에 캠이 들어가면 화면전체가 검은색이되버리고 밝은부분에선 화면전체가 백색이 되어버립니다.

어떤식으로 코드를 변경해야될지 몰라서 질문드렸는데 질문글이 정리가안되고 두서없어서 죄송합니다.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호