2015-05-02 2 views
-1

----------------- ИСПРАВЛЕННАЯ ВЕРСИЯ -----------Обработка изображений с использованием обработки

В настоящее время я работаю над проектом с использованием Обработки , Мне нужно сделать обработку изображений внутри моего проекта, изначально я думал об использовании opencv. Но, к сожалению, я обнаружил, что opencv для Processing не является полной версией оригинальной. Как я могу начать обработку изображений с помощью обработки? Я обнаружил, что, поскольку обработка является оболочкой 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 не установлен, но они правильно установлены

+0

Если вы находитесь в режиме Java в обработке, вы можете использовать любая библиотека Java внутри вашего эскиза. Что вы пробовали? –

+0

, но как насчет классов java? – tunchunairarko

+0

Что с ними? Я действительно не уверен, в чем ваш вопрос. Вы можете использовать Java для обработки, и вы можете использовать Обработку с Java. –

ответ

0

Похоже, вы пытаетесь сделать template matching с OpenCV? Похоже, ваши ошибки связаны с установкой OpenCV, а не с вашим кодом.

OpenCV Вопросы
1. Установлен ли OpenCV ранее? Это может вызвать проблемы с версией обработки.
2. Если нет, попробуйте уменьшить код до тех пор, пока не достигнете линии, которая сначала вызывает ошибку. Если это указано в операторах импорта, вы знаете, что это проблема с установкой OpenCV. 3. Вы не указываете свою ОС, но если вы находитесь на Mac, вы можете следить за моим detailed instructions for installing it.

Могу ли я сделать это с другой библиотекой?
Да, см. Некоторые комментарии к вашему вопросу. Но конкретный процесс, который, как я думаю, вы пытаетесь сделать, будет затруднен. Я думаю, вам лучше работать с OpenCV.

0

Нижеприведенный код считывает изображение в разделе Обработка, а затем применяет фильтр (в этом случае он его pixilates).

img.pixels[i] Обратите внимание, что является 1 мерный массив, в то время как картины 2d. Трюк, чтобы получить доступ к 2d расположение является img.pixels[r*img.width + 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); 
} 

Результат: