У меня есть простой код, используя 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 часть с черно-белым изображением
пожалуйста, скажите мне, что случилось с моим кодом ?? T_T ТНХ
Не должно ли ваше изображение вывода быть создано с каналами, установленными в 1, а не 'image_input-> nChannels'? –
Я все еще не понимаю, почему канал должен быть установлен на 1 ?? Я думаю, что канал должен быть таким же, как input_image>. < – bagusbekam
Я просто догадываюсь, так как не знаю, как работает CV, но ваш код в градациях серого преобразует три канала (R, G, B) в один канал (уровень Серый). –