컴퓨터 과학 & 영상처리 관련/영상처리 Color to Gray, BYTE to Ipl, Ipl to BYTE 관련 꺄뜨르 2013. 9. 9. 18:59 void BYTEcopyImage(BYTE* src, BYTE* dst,int width, int height,int channel) { for(int i = 0 ; i < height ; i++) { for(int j = 0 ; j < width; j++) { for(int k = 0 ; k < channel ; k++) { dst[i*width*channel+j*channel+k] = src[i*width*channel+j*channel+k]; } } } } void BYTEdiffFunc(BYTE* src1, BYTE* src2,BYTE* dst,int size) { for(int i = 0 ; i < size ;i++) { int result = src1[i] - src2[i]; // 픽셀 끼리 빼고 if(result < 0) //만약 마이너스 값이 나오면 { dst[i] = ~result + 1; //2의 보수를 취하여 +변환 } else { dst[i] = result; //+값이 나왔을 경우 그냥 실행 } } } void BYTEinitialize(BYTE* src, int width, int height, int channel,int num) { for(int i = 0 ; i < height ; i++) { for(int j = 0 ; j < width; j++) { for(int k = 0 ; k < channel ; k++) { src[i*width+j*channel+k] = num; } } } } void iplToBYTE(IplImage* ipl, BYTE* byte, int width, int height, int channel) { for(int i = 0 ; i < height ; i++) { for(int j = 0 ; j < width; j++) { for(int k = 0 ; k < channel ; k++) { byte[i*width*channel+j*channel+k] = (unsigned char)ipl->imageData[i*width*channel+j*channel+k]; } } } } void BYTEToIpl(BYTE* byte, IplImage* ipl,int width, int height, int channel) { if(channel == 1 || channel == 3) { for(int i = 0 ; i < height ; i++) { for(int j = 0 ; j < width; j++) { for(int k = 0 ; k < channel ; k++) { ipl->imageData[i*width*channel+j*channel+k] = (char)byte[i*width*channel+j*channel+k]; } } } } else if(channel == 10) //3 to 1 { for(int i = 0 ; i < height ; i++) { for(int j = 0 ; j < width; j++) { ipl->imageData[i*width+j] = (char)((byte[i*width*3+j*3+0] + byte[i*width*3+j*3+1] + byte[i*width*3+j*3+2]) / 3); } } } else if(channel == 20) //1 to 3 { for(int i = 0 ; i < height ; i++) { for(int j = 0 ; j < width ; j++) { int index = i*width+j; for(int k = 0 ; k < 3 ; k++) { ipl->imageData[i*width*3+j*3+k] = (char)byte[index]; } } } } } void BYTEColorToGray(BYTE* color, BYTE* gray, int width, int height) { for(int i = 0 ; i < height ; i++) { for(int j = 0 ; j < width; j++) { gray[i*width+j] = (unsigned char)((color[i*width*3+j*3+0] + color[i*width*3+j*3+1] + color[i*width*3+j*3+2]) / 3); } } }