Java 图像处理
-----------------修正版----------- 我目前正在使用Processing进行一个项目。我需要在我的项目中进行图像处理,最初我想到使用opencv。但不幸的是,我发现用于处理的opencv并不是原始版本的完整版本。 如何开始使用图像处理进行图像处理?我发现,由于处理是java的包装,所以java语言被接受。我可以在处理内部使用JavaCV吗?如果是,怎么做?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.
以下是示例代码:-
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可以在没有任何库的情况下处理很多…关于使用库,请阅读:底部是非处理库的说明。