2013-02-12 180 views
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或其他方法?

感谢您的帮助

回答

1

我已经阐述过这一议题on this answer

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

+0

可以请你通知显示完整简单代码的线程,并附上简要说明..非常感谢你 – dzikri 2013-02-14 08:55:28

+0

我觉得这就是[答案](http://stackoverflow.com/a/14696576/176769)正在显示。您需要将手放在OpenCV的文档中,并检查“Rect”和“Mat”的构造函数作为参数。 – karlphillip 2013-02-14 16:27:48