1

我是 OpenCV 的新手,所以请耐心等待。我正在做一个 Android 应用程序来测量叶子颜色的相似性。我尝试使用 canny 仅检测叶区域,但我认为它需要更长的过程。这是代码,仅用于叶面积的检测。

public class editImage extends Activity {
//private static final int CV_64FC1 = 0;
protected ImageView im;
protected String msg_path;
private Mat mMatriximg;

private Mat mMatriximgBW;
private int CV_64FC1;

//private Mat mMatriximgBW;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.image_layout);

    im = (ImageView) findViewById(R.id.imV_ed);
    Intent iIdentify = getIntent();
    msg_path = iIdentify.getStringExtra("path");

    //to grayscale
    int im_gray = Highgui.CV_LOAD_IMAGE_GRAYSCALE;
    mMatriximg = Highgui.imread(msg_path, im_gray);

    // call library OpenCV
    //Imgproc.equalizeHist(mMatriximg, mMatriximg);
    Imgproc.Canny(mMatriximg, mMatriximg, 50, 150);

    mMatriximgBW = Mat.zeros(mMatriximg.height(), mMatriximg.width(), CV_64FC1);

    double y;
    double threshold=190;

    for(int i=0; i<mMatriximg.height(); i++){
        for(int j=0; j<mMatriximg.width(); j++){
            if(mMatriximg.get(i, j) [0]>=threshold){
                y=255;
            }else{
                y=0;        
            }
            mMatriximgBW.put(i, j, new double[] {y});
        }
    }

    //result mat to Grayscale
    Imgproc.cvtColor(mMatriximgBW, mMatriximgBW, Imgproc.COLOR_GRAY2RGBA, 4);

    Bitmap bmpOut = Bitmap.createBitmap(mMatriximgBW.cols(), mMatriximgBW.rows(), Bitmap.Config.ARGB_8888);

    Utils.matToBitmap(mMatriximgBW, bmpOut);
    im.setImageBitmap(bmpOut);

}

public void bckHome(View v){
    Intent iIden = new Intent(this, MBWDActivity.class);
    setResult(RESULT_OK, iIden);
    startActivityForResult(iIden, 99);
}
}

所以我认为如果我切出叶子的中心作为样本数据(矩阵)会更有效。

有谁可以分享如何实现 cvSetImageROI 或其他方法?

感谢您的任何帮助

4

1 回答 1

1

我已经在这个答案上讨论了这个话题。

您需要Rect使用 ROI 的维度创建一个。然后,创建一个新Mat的并将原始图像作为第一个参数传递给它的构造函数,并将具有 ROI 的矩形作为第二个参数。

于 2013-02-12T18:35:54.313 回答