Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图像处理_Java_Opencv_Image Processing_Computer Vision_Processing - Fatal编程技术网

Java 图像处理

Java 图像处理,java,opencv,image-processing,computer-vision,processing,Java,Opencv,Image Processing,Computer Vision,Processing,-----------------修正版----------- 我目前正在使用Processing进行一个项目。我需要在我的项目中进行图像处理,最初我想到使用opencv。但不幸的是,我发现用于处理的opencv并不是原始版本的完整版本。 如何开始使用图像处理进行图像处理?我发现,由于处理是java的包装,所以java语言被接受。我可以在处理内部使用JavaCV吗?如果是,怎么做? 以下是示例代码:- import gab.opencv.*; import org.opencv.imgproc.

-----------------修正版-----------

我目前正在使用Processing进行一个项目。我需要在我的项目中进行图像处理,最初我想到使用opencv。但不幸的是,我发现用于处理的opencv并不是原始版本的完整版本。 如何开始使用图像处理进行图像处理?我发现,由于处理是java的包装,所以java语言被接受。我可以在处理内部使用JavaCV吗?如果是,怎么做?
以下是示例代码:-

import gab.opencv.*;
import org.opencv.imgproc.Imgproc;
import org.opencv.core.Core;
import org.opencv.highgui.Highgui;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.CvType;
import org.opencv.core.Point;
import org.opencv.core.Size;
import org.opencv.core.Core.MinMaxLocResult;
PImage imgBack, rightSection, leftSection;
PImage img;

void setup(){
  imgBack=loadImage("tk100backback.jpg");
  leftSection=imgBack.get(0,0,14,200);
  rightSection=imgBack.get(438,0,32,200);
  img=createImage(46,200,RGB);
  img.set(0,0,rightSection);
  img.set(32,0,leftSection);
  size(46,200);
  Mat src= Highgui.imread(img.toString());
  Mat tmp=Highgui.imread("templateStarMatching.jpg");
  int result_cols=src.cols()-tmp.cols()+1;
  int result_rows=src.rows()-tmp.rows()+1;
  Mat result = new Mat(result_rows, result_cols, CvType.CV_32FC1);
  Imgproc.matchTemplate(src, tmp, result, Imgproc.TM_CCOEFF_NORMED);

  MatOfPoint minLoc = new MatOfPoint();
  MatOfPoint maxLoc = new MatOfPoint();
  MinMaxLocResult mrec=new MinMaxLocResult();
  mrec=Core.minMaxLoc(result,null);

  System.out.println(mrec.minVal);
  System.out.println(mrec.maxVal);

  Point point = new Point(mrec.maxLoc.x+tmp.width(), mrec.maxLoc.y+tmp.height());
 // cvRectangle(src, maxLoc, point, CvScalar.WHITE, 2, 8, 0);//Draw a Rectangle for Matched Region

}
void draw(){
  image(img,0,0);
}

核心不存在,Highgui未正确安装,但它们已正确安装,这不断给我带来错误。看起来您正在尝试使用OpenCV?听起来您的错误与OpenCV的安装有关,而不是您的代码

OpenCV问题
1.您以前安装过OpenCV吗?它可能会导致处理版本出现问题。
2.如果没有,请尝试减少代码,直到到达第一个导致错误的行。如果它在import语句中,您就知道这是一个OpenCV安装问题。 3.你没有列出你的操作系统,但是如果你在Mac上,你可以按照我的

我可以用另一个库来做吗?

是的,请参阅对您的问题的一些评论。但我认为你正在尝试的具体过程将是困难的。我认为最好让OpenCV工作。

下面的代码在处理过程中读取一个图像,然后应用一个过滤器(在本例中,它会将其显示出来)

请注意,
img.pixels[i]
是一个1维数组,而图片是2d。访问2d位置的技巧是
img.pixels[r*img.width+c]
其中r和c分别是像素行和像素列

 // Declaring a variable of type PImage
PImage img;  
void setup() {

  // Make a new instance of a PImage by loading an image file
  ![enter image description here][1]img = loadImage("http://www.washingtonpost.com/wp-srv/special/lifestyle/the-age-of-obama/img/obama-v2/obama09.jpg");
  //img = loadImage("background.jpg");
  size(img.width, img.height);


   int uberPixel = 25;
  for(int row = 0; row < img.height; row+= uberPixel){
    for(int col = 0; col < img.width; col+= uberPixel){
      int colo[] = new int[3];
     int cnt = 0;
     for(int r = row; r <= row + uberPixel; r ++){
       for(int c = col; c <= col +uberPixel; c ++){
          if(r*img.width + c < img.pixels.length){
            colo[0] += red(img.pixels[r*img.width + c]);
            colo[1] += green(img.pixels[r*img.width + c]);
            colo[2] += blue(img.pixels[r*img.width + c]);
            cnt++;
          }
       }
     }
     //average color
     for(int i = 0; i < 3; i ++){
       colo[i] /= cnt;
     }

     //change pixel
     for(int r = row; r <= row + uberPixel; r ++){
       for(int c = col; c <= col +uberPixel; c ++){
         if(r*img.width + c < img.pixels.length){
           img.pixels[r*img.width+c] = color(colo[0],colo[1],colo[2]);
         } 
       }
     }

    }
  }
  image(img,0,0);
}

void draw() {
  image(img,0,0);
}
//声明PImage类型的变量
皮马杰;
无效设置(){
//通过加载图像文件创建PImage的新实例
![在此处输入图像描述][1]img=loadImage(“http://www.washingtonpost.com/wp-srv/special/lifestyle/the-age-of-obama/img/obama-v2/obama09.jpg");
//img=loadImage(“background.jpg”);
尺寸(最小宽度、最小高度);
int=25;
对于(int行=0;行对于(int r=row;r,这里有一个在处理中使用
javacv
的示例:

import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;

void setup ()
{
    size( 256, 256 );

    String fn = sketchPath("data/lena.jpg");
    IplImage ip= cvLoadImage(fn);
    if ( ip != null ) 
    {
        cvSmooth( ip, ip, CV_GAUSSIAN, 3 );

        PImage im = ipToPImage(ip);
        image( im, 0, 0 );       
        cvReleaseImage(ip);
    }
}
PImage ipToPImage ( IplImage ip ) 
{
    java.awt.image.BufferedImage bImg = ip.getBufferedImage();
    PImage im = new PImage( bImg.getWidth(), bImg.getHeight(), ARGB );
    bImg.getRGB( 0, 0, im.width, im.height, im.pixels, 0, im.width );
    im.updatePixels();
    return im;
}

如果你在处理中处于Java模式,你可以使用草图中的任何Java库。你尝试过什么?但是Java类呢?它们呢?我真的不确定你的问题是什么。你可以从处理中使用Java,也可以从Java中使用处理。也许你可以指定你想要做的图像处理类型。Processing it self可以在没有任何库的情况下处理很多…关于使用库,请阅读:底部是非处理库的说明。