首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在CameraFrame android + openCV上使用门限

问如何在CameraFrame android + openCV上使用门限
EN

Stack Overflow用户
提问于 2015-11-13 13:12:34
回答 1查看 1.4K关注 0票数 1

我尝试在openCV示例代码"ColorBlobDetection“中使用阈值。但我发现了一些错误。

那个错误。

代码语言:javascript
复制
11-13 20:10:03.798  28032-30391/app.heng.opencv E/cv::error()﹕ OpenCV Error: Assertion failed (src.type() == CV_8UC1) in double cv::threshold(cv::InputArray, cv::OutputArray, double, double, int), file /home/reports/ci/slave_desktop/50-SDK/opencv/modules/imgproc/src/thresh.cpp, line 719
11-13 20:10:03.828  28032-30391/app.heng.opencv E/org.opencv.imgproc﹕ imgproc::threshold_10() caught cv::Exception: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/imgproc/src/thresh.cpp:719: error: (-215) src.type() == CV_8UC1 in function double cv::threshold(cv::InputArray, cv::OutputArray, double, double, int)
11-13 20:10:03.858  28032-30391/app.heng.opencv E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-10693
CvException [org.opencv.core.CvException: cv::Exception: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/imgproc/src/thresh.cpp:719: error: (-215) src.type() == CV_8UC1 in function double cv::threshold(cv::InputArray, cv::OutputArray, double, double, int)
]
        at org.opencv.imgproc.Imgproc.threshold_0(Native Method)
        at org.opencv.imgproc.Imgproc.threshold(Imgproc.java:9180)
        at app.heng.opencv.ColorBlobDetectionActivity.onCameraFrame(ColorBlobDetectionActivity.java:241)
        at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:387)
        at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:328)
        at java.lang.Thread.run(Thread.java:841)

这里的样本图片在使用阈值之前。

​

这里的样本图片使用后,我想要的阈值。

​

openCV示例代码

代码语言:javascript
复制
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    mRgba = inputFrame.rgba();  // mRbga = input frame with color
    MatOfPoint2f  approxCurve = new MatOfPoint2f();

    if (mIsColorSelected) {
        mDetector.process(mRgba);
        final List<MatOfPoint> contours = mDetector.getContours();  //contour info is ready in detector
        Log.e(TAG, "Contours count: " + contours.size());   

        Core.putText(mRgba, ""+contours.size(), new Point(mRgba.cols()/2, mRgba.rows()/2), 3, 1, new Scalar(255, 255, 255, 255), 2);

        //green contous and size=5
        Imgproc.drawContours(mRgba, contours, -1, new Scalar(0, 255, 0), 3);



        Imgproc.threshold(mRgba, mRgba, 0, 255, Imgproc.THRESH_OTSU);



        Mat colorLabel = mRgba.submat(4, 68, 4, 68);
        colorLabel.setTo(mBlobColorRgba);
        Mat spectrumLabel = mRgba.submat(4, 4 + mSpectrum.rows(), 70, 70 + mSpectrum.cols());
        mSpectrum.copyTo(spectrumLabel); 
    }

    return mRgba;
}

这是原始源代码这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-13 13:40:22

正如文档所说:

公共静态双阈值( Mat src,Mat dst,双重阈值,双最大值,int型) 参数:

  • src -源阵列(单通道、8位或32位浮点).
  • dst -目标数组的大小和类型与src相同。
  • 阈值。
  • maxval -与THRESH_BINARY和THRESH_BINARY_INV阈值类型一起使用的最大值。
  • 类型- Thresholding类型(请参阅下面的详细信息)。

您需要将mRgba转换为单通道Mat。

cvtColor:Imgproc.cvtColor(input, output, Imgproc.COLOR_BGRA2GRAY, 1);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33693531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档