| ||
: О проекте :: Устройство робота :: Фото и видео :: Демострационный софт :: О авторе : | ||
Оконтуривание видеоизображенияНиже предствлен код оконтуривания видеоизображения. При оконтуривании следует задавать коэффициент оконтуривания, который равен от 7-10 (в зависимости от параметров камерЫ, освещенности, контрастности и размеров изображения). Алгоритм, показанный ниже, сравнивает соседние пиксели по вертикали и по горизонтали. Если разности интенсивности цвета сравниваемых пикселей больше заданного уровня оконтуривания, то на оконтуренное изображение помещается черный пиксель (цвет 0), в противном случае - белый пиксель (цвет 255). Пример приведен на языке Delphi: const ImageWidth = 384; // ширина изображения. Если умножить на 3 должно быть кратным 4 ImageHeight = 284; // высота изображения type // тип данных для черно-белого изображения TBWImage = array[0..ImageHeight-1,0..ImageWidth-1] of Byte; {---------------------------------------------------} { Процедура оконтуривает черно-белое изображение } { начиная со сторки FromY и заканчивая строкой ToY } { Contrast - уровень констрастности } { (рекомендуется 7-10) } {---------------------------------------------------} procedure BWImageToContoureImage(const BWImage : TBWImage; var ContourizeImage:TBWImage; FromY,ToY:Integer; Contrast : Byte ); assembler; asm // EAX-BWImage; EDX-ContourizeImage; ECX-FromY PUSH EDI PUSH ESI MOV ESI,EAX MOV EDI,EDX MOV EAX,ImageWidth MUL ECX ADD ESI,EAX ADD EDI,EAX SUB ECX,ToY NEG ECX MOV DL,Contrast @@0: PUSH ECX MOV ECX,ImageWidth-1 @@1: LODSB MOV AH,AL SUB AL,[ESI] JNS @@2 NEG AL @@2: CMP AL,DL JB @@3 XOR AL,AL JMP @@6 @@3: SUB AH,[ESI+ImageWidth-1] JNS @@4 NEG AH @@4: CMP AH,DL JB @@5 XOR AL,AL JMP @@6 @@5: MOV AL,255 @@6: STOSB LOOP @@1 POP ECX INC EDI INC ESI LOOP @@0 POP ESI POP EDI end; procedure TForm1.Timer1Timer(Sender:TObject); begin { получить черно-белое изображение в BWImage } // Оконтуривание изображения, // результат помещается в ту же переменную BWImage BWImageToContourizeImage( BWImage, BWImage, 0, ImageHeight, 7); // Вывести изображение BWImage2 на PaintBox1 см. захват изображения DrawBWImage( PaintBox1.Canvas.Handle, BWImage ); ... end; | ||
Дизайн: DynSoft |