|
| ||
| : О проекте :: Устройство робота :: Фото и видео :: Демострационный софт :: О авторе : | ||
Оконтуривание видеоизображенияНиже предствлен код оконтуривания видеоизображения. При оконтуривании следует задавать коэффициент оконтуривания, который равен от 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 |