我正在创建一个Android应用程序,可以从视频中捕获的图像帧中检测对象。
openCV中的示例应用程序仅提供实时检测示例。
其他信息: - 我正在使用Haar分类器
截至目前,我已经存储了在ImageView数组中捕获的帧,如何使用OpenCV检测对象并在其周围绘制一个矩形?
for(int i=0 ;i <6; i++)
{
ImageView imageView = (ImageView)findViewById(ids_of_images[i]);
imageView.setImageBitmap(retriever.getFrameAtTime(looper,MediaMetadataRetriever.OPTION_CLOSEST_SYNC));
Log.e("MicroSeconds: ", ""+looper);
looper +=10000;
}
答案 0 :(得分:3)
我希望你在你的项目中集成了opencv 4 android库。 现在,您可以使用opencv函数将图像转换为Mat
Mat srcMat = new Mat();
Utils.bitmapToMat(yourbitmap,srcMat);
一旦你有了mat,就可以应用opencv函数从图像中找到矩形对象。 现在,按照代码检测矩形:
Mat mGray = new Mat();
cvtColor(mRgba, mGray, Imgproc.COLOR_BGR2GRAY, 1);
Imgproc.GaussianBlur(mGray, mGray, new Size(3, 3), 5, 10, BORDER_DEFAULT);
Canny(mGray, mGray, otsu_thresold, otsu_thresold * 0.5, 3, true); // edge detection using canny edge detection algorithm
List<MatOfPoint> contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.findContours(mGray,contours,hierarchy,Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
现在,你有来自图像的轮廓。因此,您可以从中获取最大轮廓并使用drawContour()方法绘制它:
for (int contourIdx = 0; contourIdx < contours.size(); contourIdx++){
Imgproc.drawContours(src, contours, contourIdx, new Scalar(0, 0, 255)-1);
}
你已经完成了!!你可以参考这个链接: Android using drawContours to fill region
希望它会有所帮助!!