От RGB к оттенкам серого (не могу показать полное изображение)

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

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 части с изображением в градациях серого
результат

подскажите пожалуйста что не так с моим кодом ?? T_T
Спасибо

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]