前回に続き, 画像処理の基本について説明する.
3.17 矩形領域のピクセル値をサブピクセル精度で取得する[1][2]
Imgproc#getRectSubPixメソッドを用いると, バイリニア補間された浮動小数点座標のピクセル値を得ることができる.
[手順]
(1) 画像データを読み込む.
(2) 矩形領域ピクセル値をサブピクセル精度で取得する.
[コード]
package com.moonlight_aska.android.opencv.image17;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.widget.ImageView;
public class Image17Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// cv::Mat src_img = cv::imread("../../iamge/lenna.png", 1);
Mat srcMat = Highgui.imread("/sdcard/OpenCV/sample/lena.jpg", 1);
if (!srcMat.empty()) {
// (x, y)=(200, 200), (width, height)=(100, 100)
// cv::Mat roi_img(src_img, cv::Rect(200, 200, 100, 100));
// 不要なコード
// cv::Size pitch_sie(100.0, 100.0);
Size pitchSize = new Size(100.0, 100.0);
// cv::Point2f center(250.0 250.0);
Point center = new Point(250.0, 250.0);
// cv::Mat dst_img;
Mat dstMat = new Mat();
// 矩形領域ピクセル値をサブピクセル精度で取得
// cv::getRectSubPix(src_img, patch_sie, center, dst_img);
Imgproc.getRectSubPix(srcMat, pitchSize, center, dstMat);
Bitmap roiImg = convMatToBitmap(dstMat);
ImageView roiView = (ImageView)findViewById(R.id.roi_view);
roiView.setImageBitmap(roiImg);
}
}
// MatからBitmapに変換
Bitmap convMatToBitmap(Mat src) {
Mat dst = new Mat();
// BGR→RGBAに変換
Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2RGBA, 4);
Bitmap img = Bitmap.createBitmap(src.width(), src.height(), Bitmap.Config.ARGB_8888);
// MatからBitmapに変換
Utils.matToBitmap(dst, img);
return img;
}
}
[入力画像]
[実行結果]
----
参照URL:
[1] OpenCV 2 プログラミングブック OpenCV2.2/2.3対応
[2] OpenCV逆引きリファレンス―OpenCV-CookBook