首页 > 解决方案 > 命令 .copyto 失败

问题描述

我是一名学生,我正在开发将扫描数独并解决它的应用程序。我正在拍照,而不是找到最大的轮廓。这就是工作。当我想在空垫子上提取最大的计数器(它有白色背景)时,问题就开始了,应用程序不显示应该的图片活动(在其他图像中)但它返回到我的主要活动. 我正在使用本教程进行提取:https ://bytefish.de/blog/extracting_contours_with_opencv/ 。

mat4=mat1; // mat 1 is current frame on camera
transpose(mat4, mat4);
flip(mat4, mat4, +1);
mat5=mat4;
Mat okraje = new Mat();
Mat hiearchy = new Mat();
Imgproc.cvtColor(mat5,mat5,Imgproc.COLOR_BGR2GRAY);
List<MatOfPoint> contourList = new ArrayList<MatOfPoint>();
Imgproc.Canny(mat5,okraje,80,100);

Imgproc.findContours(okraje,contourList,hiearchy,Imgproc.RETR_CCOMP, Imgproc.CHAIN_APPROX_SIMPLE); // TOPKA JEBNE PLNY STVOREC A KRATKO!!

for(int ab=0;ab < contourList.size(); ab++ ){
  a = contourArea(contourList.get(ab),false);
  if(a>largest_area){
    b=ab;
    largest_area = a;
    largest_contour_index=ab;
    bounding_rect=boundingRect(contourList.get(ab));
  }
}

Mat len_sudkoku = new Mat();
len_sudkoku.create(mat5.rows(), mat5.cols(),CvType.CV_8UC3);
len_sudkoku.setTo(new Scalar(255,255,255));

Mat lskere = new Mat();
lskere.create(okraje.cols(), okraje.rows(), CvType.CV_8UC1);
Random r = new Random();
Imgproc.drawContours( lskere, contourList,largest_contour_index, new Scalar(r.nextInt(255), r.nextInt(255), r.nextInt(255)), -1);
mat5.copyTo(len_sudkoku,lskere); // pada to!!

Bitmap bm = Bitmap.createBitmap(len_sudkoku.cols(),len_sudkoku.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(len_sudkoku,bm);

setContentView(R.layout.activity_fotka_ukaz);
ImageView IMW = findViewById(R.id.imageView);
    IMW.setImageBitmap(bm);

我希望就像我在此处发布的教程中一样,其中一个人提取了一个苹果并将其放在另一个背景上。我注意到的是,当我使用命令时,应用程序返回到主要活动(它应该显示图像)

mat5.copyTo(len_sudkoku, lskere)

标签: androidopencv

解决方案


好的,我解决了。问题不在于(显然)的命令复制,而在于不同垫子和位图的声明大小。问题是,在声明中,第一个输入有时是行和列,所以它崩溃了。现在我将大小添加到 Mat 层次结构和 okraje,并将 lskere.create(okraje.cols(), okraje.rows(), 编辑为 lskere.create(okraje.rows(), okraje.cols()..


推荐阅读