【发布时间】:2015-08-26 07:59:45
【问题描述】:
我想尝试使用 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;
}
}
任何形式的帮助都会很棒。提前致谢=)
【问题讨论】: