2013-11-11 2 views
0

У меня есть простой код, используя C++ (в сочетании с OpenCV) Вот код (основной)RGB в оттенки серого (косяк показать полное изображение)

int main(int argc, char** argv) 
{ 

    IplImage* image_input = cvLoadImage("test.jpg", CV_LOAD_IMAGE_UNCHANGED); 
    IplImage* image_output =cvCreateImage(cvGetSize(image_input), 
       IPL_DEPTH_8U,image_input->nChannels); 

    unsigned char *h_out = (unsigned char*)image_output->imageData; 
    unsigned char *h_in = (unsigned char*)image_input->imageData; 

    int width  = image_input->width; 
    int height = image_input->height; 

    h_grayscale (h_in , h_out) ; 
    cvShowImage("Original", image_input); 
    cvShowImage("CPU", image_output); 
    cvReleaseImage(&image_input); 
    cvReleaseImage(&image_output); 
    waitKey(0); 
} 

и это функция для градаций серого

void h_grayscale(unsigned char* h_in, unsigned char* h_out){ 
    for (unsigned int i=0; i< width*height; i++){ 
     unsigned int index = i*3; 
     double temp = 0.3*h_in[index]+0.6*h_in[index+1]+0.1*h_in[index+2]; 
     h_out[i] = (unsigned char)temp; 
    } 
} 

но результаты изображения разделены на 3 часть с черно-белым изображением result

пожалуйста, скажите мне, что случилось с моим кодом ?? T_T ТНХ

+0

Не должно ли ваше изображение вывода быть создано с каналами, установленными в 1, а не 'image_input-> nChannels'? –

+0

Я все еще не понимаю, почему канал должен быть установлен на 1 ?? Я думаю, что канал должен быть таким же, как input_image>. < – bagusbekam

+1

Я просто догадываюсь, так как не знаю, как работает CV, но ваш код в градациях серого преобразует три канала (R, G, B) в один канал (уровень Серый). –

ответ

0

Вам нужно отредактировать код, чтобы создать только один выходной файл канала, так как это черно-белое изображение:

IplImage* image_output =cvCreateImage(cvGetSize(image_input), IPL_DEPTH_8U, 1); 

Кроме того, с помощью «простого кода с использованием C++ (с OpenCV)» Я Представьте себе что-то вроде этого:

int main() 
{ 
    Mat image_input = imread("test.jpg"); 
    Mat image_output; 

    cvtColor(image_input, image_output, CV_BGR2GRAY); 

    imshow("Original", image_input); 
    imshow("CPU", image_output); 
    waitKey(0); 

    return 0; 
} 
+0

проблема okk решена ... Я не понимаю его о канале .. thanksss^_ ^ – bagusbekam