mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.0 KiB
84 lines
2.0 KiB
#! /usr/bin/env octave |
|
cv; |
|
highgui; |
|
|
|
global g; |
|
inpaint_mask = []; |
|
g.img0 = []; |
|
g.img = []; |
|
g.inpainted = []; |
|
g.prev_pt = cvPoint(-1,-1); |
|
|
|
function on_mouse( event, x, y, flags, param ) |
|
global g; |
|
global cv; |
|
global highgui; |
|
if (!swig_this(g.img)) |
|
return; |
|
endif |
|
|
|
if (event == highgui.CV_EVENT_LBUTTONUP || ! (bitand(flags,highgui.CV_EVENT_FLAG_LBUTTON))) |
|
g.prev_pt = cvPoint(-1,-1); |
|
elseif (event == highgui.CV_EVENT_LBUTTONDOWN) |
|
g.prev_pt = cvPoint(x,y); |
|
elseif (event == highgui.CV_EVENT_MOUSEMOVE && bitand(flags,highgui.CV_EVENT_FLAG_LBUTTON)) |
|
pt = cvPoint(x,y); |
|
if (g.prev_pt.x < 0) |
|
g.prev_pt = pt; |
|
endif |
|
cvLine( g.inpaint_mask, g.prev_pt, pt, cvScalarAll(255), 5, 8, 0 ); |
|
cvLine( g.img, g.prev_pt, pt, cvScalarAll(255), 5, 8, 0 ); |
|
g.prev_pt = pt; |
|
cvShowImage( "image", g.img ); |
|
endif |
|
endfunction |
|
|
|
filename = "../c/fruits.jpg"; |
|
if (size(argv, 1)>=1) |
|
filename = argv(){1}; |
|
endif |
|
|
|
g.img0 = cvLoadImage(filename,-1); |
|
if (!swig_this(g.img0)) |
|
printf("Can't open image '%s'\n", filename); |
|
exit(1); |
|
endif |
|
|
|
printf("Hot keys:\n"); |
|
printf("\tESC - quit the program\n"); |
|
printf("\tr - restore the original image\n"); |
|
printf("\ti or ENTER - run inpainting algorithm\n"); |
|
printf("\t\t(before running it, paint something on the image)\n"); |
|
|
|
cvNamedWindow( "image", 1 ); |
|
|
|
g.img = cvCloneImage( g.img0 ); |
|
g.inpainted = cvCloneImage( g.img0 ); |
|
g.inpaint_mask = cvCreateImage( cvGetSize(g.img), 8, 1 ); |
|
|
|
cvZero( g.inpaint_mask ); |
|
cvZero( g.inpainted ); |
|
cvShowImage( "image", g.img ); |
|
cvShowImage( "watershed transform", g.inpainted ); |
|
cvSetMouseCallback( "image", @on_mouse, [] ); |
|
|
|
while (true) |
|
c = cvWaitKey(0); |
|
|
|
if( c == 27 || c=='q') |
|
break; |
|
endif |
|
|
|
if( c == 'r' ) |
|
cvZero( g.inpaint_mask ); |
|
cvCopy( g.img0, g.img ); |
|
cvShowImage( "image", g.img ); |
|
endif |
|
|
|
if( c == 'i' || c == '\012' ) |
|
cvNamedWindow( "g.inpainted image", 1 ); |
|
cvInpaint( g.img, g.inpaint_mask, g.inpainted, 3, CV_INPAINT_TELEA ); |
|
cvShowImage( "g.inpainted image", g.inpainted ); |
|
endif |
|
endwhile |
|
|
|
|