OpenCV:轮廓检测Android contourldx问题 我能用C++检测图像中的轮廓。然而,我想用java语言在Android中转换它。所以,我用Android studio制作它。 (部分原因是我是JAVA新手)
然后我发现了一些问题,当我运行它时,我遇到了一个错误,这段代码有问题: 如果(轮廓[contourIdx].size()>100) 在这个主程序中OpenCV:轮廓检测Android contourldx问题 我能用C++检测图像中的轮廓。然而,我想用java语言在Android中转换它。所以,我用Android studio制作它。 (部分原因是我是JAVA新手),java,android,opencv,opencv4android,opencv-contour,Java,Android,Opencv,Opencv4android,Opencv Contour,然后我发现了一些问题,当我运行它时,我遇到了一个错误,这段代码有问题: 如果(轮廓[contourIdx].size()>100) 在这个主程序中 @Override public void onCameraViewStarted(int width, int height) { mRgba = new Mat(height, width, CvType.CV_8UC4); mHsv = new Mat(height,width,CvType.CV_8U
@Override
public void onCameraViewStarted(int width, int height) {
mRgba = new Mat(height, width, CvType.CV_8UC4);
mHsv = new Mat(height,width,CvType.CV_8UC3);
hierarchy = new Mat();
mHsvMask = new Mat();
mDilated = new Mat(height, width, CvType.CV_8UC4);
}
@Override
public void onCameraViewStopped() {
mRgba.release();
mHsv.release();
mHsvMask.release();
mDilated.release();
hierarchy.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba =inputFrame.rgba();
mHsv = new Mat();
Imgproc.cvtColor(mRgba, mHsv, Imgproc.COLOR_RGB2HSV, 3);
hierarchy.release();
Scalar lowerThreshold = new Scalar ( 120, 100, 100 );
Scalar upperThreshold = new Scalar ( 179, 255, 255 );
Core.inRange ( mHsv, lowerThreshold , upperThreshold, mHsvMask );
Imgproc.dilate ( mHsvMask, mDilated, new Mat() );
Imgproc.findContours(mDilated, contours, hierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
for ( int contourIdx=0; contourIdx < contours.size(); contourIdx++ )
{
if(contours[contourIdx].size()>100) // Minimum size allowed for consideration
{
Imgproc.drawContours ( mRgba, contours, contourIdx, new Scalar(0,255,0) , -5);
}
}
return mRgba;
}
}
@覆盖
开始时的公共空隙(整数宽度、整数高度){
mRgba=新垫(高度、宽度、CvType.CV_8UC4);
mHsv=新垫(高度、宽度、CvType.CV_8UC3);
层次结构=新的Mat();
mHsvMask=新材料();
mDilated=新垫(高度、宽度、CvType.CV_8UC4);
}
@凌驾
CAMERAVIEWSTOPPED()上的公共空白{
mRgba.release();
mHsv.release();
mhsvsmask.release();
mDilated.release();
hierarchy.release();
}
@凌驾
CameraFrame上的公用Mat(CameraBridgeViewBase.CvCameraViewFrame inputFrame){
mRgba=inputFrame.rgba();
mHsv=新材料();
Imgproc.CVT颜色(mRgba、mHsv、Imgproc.COLOR_RGB2HSV,3);
hierarchy.release();
标量lowerThreshold=新标量(120100100);
标量上限阈值=新标量(179255 255);
Core.inRange(mHsv、下限阈值、上限阈值、mHsvMask);
Imgproc.displate(mhsvsmask,mditated,new Mat());
Imgproc.findContours(相关、轮廓、层次、Imgproc.RETR\u列表、Imgproc.CHAIN\u近似、简单);
用于(int-contourIdx=0;contourIdx100)//允许考虑的最小尺寸
{
Imgproc.drawContours(mRgba,contours,contourIdx,新标量(0255,0),-5);
}
}
返回mRgba;
}
}
希望有人在这方面有一些经验。谢谢。使用面积概念
if(Imgproc.contourArea(contours.get(contourIdx))>100) {
Imgproc.drawContours(mRgba, contours, contourIdx, new Scalar(Math.random() * 255, Math.random() * 255, Math.random() * 255), 1, 8, hierarchy, 0, new Point());
}
使用面积概念
if(Imgproc.contourArea(contours.get(contourIdx))>100) {
Imgproc.drawContours(mRgba, contours, contourIdx, new Scalar(Math.random() * 255, Math.random() * 255, Math.random() * 255), 1, 8, hierarchy, 0, new Point());
}
勾选答案Bagus W(如果它真的有效)并帮助您勾选答案Bagus W(如果它真的有效)并帮助您您可以从一些书籍中了解open cv,您可以从中获得,并在搜索框中搜索opencv您可以从一些书籍中了解open cv,并在搜索框中搜索opencv