我想尝试使用OpenCV在Java中实现FloodFill。
我找到了一个例子。太糟糕了,它无法识别导入库。
基本上有两个问题。
1。我不知道那是什么:
import controlP5.ControlP5;
import controlP5.Slider;
import processing.core.PApplet;
是作者写的是他使用但不分享的内容?如果不是我如何安装呢?
2。我成功安装了OpenCV。但它看起来像这样
import org.opencv.core.*;
不等于这个例子,它有什么不同吗?
您可以在下面看到源代码
import java.awt.Point;
import controlP5.ControlP5;
import controlP5.Slider;
import processing.core.PApplet;
import sj.opencv.Capture;
import sj.opencv.CxCore;
import sj.opencv.CxCore.CompareMode;
import sj.opencv.HighGui;
import sj.opencv.ImgProc;
import sj.opencv.IplImage;
import sj.opencv.PUtils;
import sj.opencv.Scalar;
import sj.opencv.Constants.ColorModel;
import sj.opencv.Constants.PixelDepth;
/**
* @author siggi
* @date Jul 29, 2010
*/
public class FloodFill extends PApplet{
int w = 320;
int h = 240;
IplImage im;
IplImage im_res;
Capture capture;
int click_x = w/2;
int click_y = h/2;
// Slider values
Slider low_slider;
Slider high_slider;
@Override
public void setup(){
size(2*w + 2, h+150);
// Camera initiated to capture from device
capture = HighGui.captureFromCAM(0);
im = CxCore.createImage(w, h, PixelDepth.IPL_DEPTH_8U, ColorModel.BGR);
im_res = CxCore.createImage(w+2, h+2, PixelDepth.IPL_DEPTH_8U, ColorModel.GRAY);
// Init GUI
ControlP5 controlP5 = new ControlP5(this);
low_slider = controlP5.addSlider("low_val", 0, 10, 5, 20, h+20, 10, 100);
high_slider = controlP5.addSlider("high_val", 0, 10, 5, 80, h+20, 10, 100);
}
@Override
public void draw(){
// When a frame becomes available
if( HighGui.queryFrame(capture, im) ){
background(70);
// Draw it
image(PUtils.getPImage(im), 0, 0);
// Start by clearing the mask (it needs to be cleared for repeatable behavior)
CxCore.set(im_res, new Scalar(0), null);
// Perform the floodfilling
ImgProc.floodFill(im, new Point( click_x, click_y ), new Scalar(low_slider.value()), new Scalar(high_slider.value()), im_res);
// This simply changes the mask from being a 0-1 value to 0-255 value for viewing
CxCore.cmpS(im_res, 0, im_res, CompareMode.CV_CMP_NOT_EQUAL);
image(PUtils.getPImage(im_res), w, 0);
}
}
@Override
public void mouseClicked(){
click_x = mouseX;
click_y = mouseY;
if( click_x<0 ) click_x = 0;
if( click_x>=w ) click_x = w-1;
if( click_y<0 ) click_x = 0;
if( click_y>=h ) click_x = h-1;
}
}
任何形式的帮助都会很棒。在此先感谢=)