Это утверждение в соединительной линии OpenCV CV_Assert( src1.size == dst.size && src1.channels() == dst.channels() );
, расположенное здесь .
Лучше убедиться, что размеры изображения и количество каналов совпадают, если они тогда cvAdd
должен быть в состоянии добавить их в обычном режиме.Я бы рекомендовал иметь отдельный результат IplImage для параметра результата на cvAdd
.
Чтобы разделить изображение на отдельные каналы, используя cvSplit
.
Для RGB
// Allocate image planes
IplImage* r = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* g = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* b = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
// Split image onto the color planes
cvSplit( src, r, g, b, NULL );
Для RGBA
// Allocate image planes
IplImage* r = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* g = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* b = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
IplImage* a = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1 );
// Split image onto the color planes
cvSplit( src, r, g, b,a NULL );
cvMerge
делает противоположное cvSplit
.
Затем вы можете вызвать cvAdd
для полученных разделенных изображений одно за другим и объединить результатобратно в конец.