我想在轮廓周围绘制矩形.我在Python中完美地完成了它但是当我将该代码翻译成android时,应用程序每次都会崩溃.
ImageView im = (ImageView) findViewById(R.id.sampleImageView);
// Bitmap bitmap = ((BitmapDrawable) im.getDrawable()).getBitmap();
Bitmap bitmap = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.room);
Mat src = new Mat();
Utils.bitmapToMat(bitmap, src);
Mat gray = new Mat();
Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGBA2GRAY);
Imgproc.Canny(gray, gray, 50, 200);
Imgproc.threshold(gray, gray, 10, 255, Imgproc.THRESH_OTSU);
List<MatOfPoint> contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.findContours(gray, contours, hierarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE, new Point(0, 0));
Imgproc.drawContours(src, contours, -1, new Scalar(0, 0, 255), -1);
/********************************/
MatOfPoint2f approxCurve = new MatOfPoint2f();
// For each contour found
for (int …Run Code Online (Sandbox Code Playgroud) 我想创建一个Android应用程序,在其中我要从图像中检测人体。我尚未开始编码(仅是一个主意),所以我无法向您显示任何代码。我听说过适用于Android的OpenCV人脸检测。我尝试使用OpenCV人脸检测,但是由于我是android的新手,所以我无法这样做。
我的问题是“ OpenCV中是否有什么可以帮助我检测整个人体而不仅仅是面部的东西?”,如果是,那么“是否有任何有关此的教程?”
提前感谢您的帮助。
我正在尝试开发一个可以从图像中读取文本的应用程序.我必须清理图像的背景.我听说fred的imagemagick textcleaner脚本可以使用,但我不知道如何使用它.有没有人对它有任何想法?
输入图片:

我想在我的Android手机上用OpenCV 3.0中的MOG2做背景减法.但是,似乎没有合适的构造函数在3.0版中创建新的BackgroundSubtractorMOG2.我的代码就在这里.
@Override
public void onCameraViewStarted(int width, int height) {
mFrame = new Mat(height, width, CvType.CV_8UC4);
mFgMaskMOG = new Mat(height, width, CvType.CV_8UC1);
pMOG2 = new BackgroundSubtractorMOG2();
}
Run Code Online (Sandbox Code Playgroud)
使用这些代码,Android studio提醒我构造函数具有受保护的访问权限.此外,当我读取BackgroundSubtractorMOG2的java src代码时,我发现构造函数有一个参数:long addr.src代码如下:
protected BackgroundSubtractorMOG2(long addr) { super(addr); }
Run Code Online (Sandbox Code Playgroud)
我是OpenCV4Android的新手,因此不知道如何在java代码中构造这样的类.除了使用旧版OpenCV4Android之外的任何解决方案?
我正在阅读一系列 jpg,然后使用 OpenCV 的 convertTo(Mat, CV_32FC3) 函数来转换它们:
Mat outImg = Mat.zeros(tmp.size(), CV_32FC3);
Mat curImg = new Mat();
for (int i = 0; i < imgCount; i++) {
fname = fp + String.format("%02d", i) + ".jpg";
curImg = imread(fname);
curImg.convertTo(curImg, CV_32FC3);
Imgproc.accumulateWeighted(curImg, outImg, 0.01);
}
outImg.convertTo(outImg, CV_8UC3, ?????);
imwrite(fp + "output" + "-" + curTime + ".jpg", outImg);
Run Code Online (Sandbox Code Playgroud)
我想我必须先将它转换回 CV_8UC3,然后才能将其写入 jpg,但我不知道该怎么做。我发现了其他一些 SO 答案,说我需要通过将它乘以 255(convertTo() 中的第三个参数)来缩放它,但这样做会使输出完全变白。100 是一个更好的数字,但仍然有大量的剪辑(更不用说 255 是 8 位图片最合乎逻辑的数字)。这是正确的方法吗?如果没有,如何正确保存图像?
在OpenCV4Android中,方法width()和之间有什么区别rows(); 那些方法height()和cols()类有Mat什么区别?
该文件并没有说明这些方法的任何事情.
我正在使用的Android应用程序中工作JavaCameraView.所以在我的活动中我实施CvCameraViewListener2.
我的实现onCameraFrame()看起来像这样:
@Override
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
final Mat frame = inputFrame.rgba();
return bs.process(frame);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:如果我发布,frame因为我不再使用它会不会很好?所以做这样的事情:
@Override
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
final Mat frame = inputFrame.rgba();
Mat result = bs.process(frame);
frame.release();
return result;
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我正在尝试使用opencv 4 android sdk检测矩形文档。首先我试图通过找到轮廓来检测它,但是它不能用于多彩色文档。您可以检查此链接以获得更好的主意: 使用OpenCV4Android检测多彩色文档
我进行了很多研究,发现可以使用houghline变换来完成它,因此我遵循以下方法来检测文档:
原始图像-> cvtColor->高斯模糊滤波器->对其进行扩张以锐化边缘->应用分水岭图像分割算法->具有动态otsu阈值的canny边缘检测->然后应用霍夫线变换
我为霍夫线变换所做的是:
Imgproc.HoughLinesP(watershedMat, lines, 1, Math.PI / 180, 50, 100, 50);
List<Line> horizontals = new ArrayList<>();
List<Line> verticals = new ArrayList<>();
for (int x = 0; x < lines.rows(); x++)
{
double[] vec = lines.get(x, 0);
double x1 = vec[0],
y1 = vec[1],
x2 = vec[2],
y2 = vec[3];
Point start = new Point(x1, y1);
Point end = new Point(x2, y2);
Line line = new Line(start, end);
if (Math.abs(x1 - x2) > Math.abs(y1-y2)) …Run Code Online (Sandbox Code Playgroud) opencv edge-detection hough-transform opencv4android houghlinesp
我认为这个问题之前有人问过,但我没有找到解决我的问题的样本或解决方案。我是 opencv 的新手,我想使用 OpenCV CameraPreview 进行纸张检测。在我的示例应用程序中,我使用带有静态初始化的 opencv 3.0.0。我了解对象识别可以通过以下步骤完成:
我的问题是现在我可以精明和模糊图像,但我不知道如何找到轮廓和矩形并用半透明颜色填充它们。
这是我当前的 onCameraFrame 函数:
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
Mat input = inputFrame.rgba();
Mat output = input.clone();
Imgproc.Canny(input, output, 50, 50);
Imgproc.blur(output, output,new Size(5,5));
//Find Contours
//Search for biggest Contour/Rectangle
//Fill Rectangle with half transparent Color
return output;
}
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决纸张检测的问题并有一个android/java的代码示例?谢谢