2015年1月16日金曜日

【補足あり】JavaCVでPixel操作サンプル

さて、昨日つくった環境で
http://blogger.shase.info/2015/01/javacv.html
公式のサンプル(といっても結局c++なんだけど…)っぽいことをしてみる。

https://code.google.com/p/javacv/wiki/OpenCV2_Cookbook_Examples_Chapter_2#Accessing_Pixel_Values
ここにある、Accessing Pixel Values ってやつ。

元画像


加工後















コード
package hoge;

import org.junit.Test;

import static org.bytedeco.javacpp.opencv_core.*;
import static org.bytedeco.javacpp.opencv_imgproc.*;
import static org.bytedeco.javacpp.opencv_highgui.*;

public class HogeTest {

 @Test
 public void test1() {

  IplImage image = cvLoadImage("abc.jpg");
  CvMat cvMat = new CvMat();
  cvGetMat(image, cvMat);

  int div = 100;
  int nbElements = cvMat.rows() * cvMat.cols() * cvMat.channels();
  for (int i = 0; i < nbElements; i++) {
   double v = (int) cvMat.get(i);
   double newV = v / div * div + div / 2;
   cvMat.put(i, newV);
  }

  IplImage image2 = new IplImage(cvMat);
  cvSaveImage("abc2.jpg", image2);
  cvReleaseImage(image);
 }
}

CvMatのgetとputがduplicatedってどーゆーことー ?_?


【補足】
get,putの代わりにcvGet2Dとか、cvSet2Dとかあるのでこれでよいですね。
と、ここまで、やって、OpenCV使うにしてもJavaCVいろいろ微妙なんじゃないかな、と思い始めた俺ががいる。

0 件のコメント:

コメントを投稿