在这里,我们将给大家分享关于Houghcircle检测精度非常低的知识,同时也会涉及到如何更有效地(转)开运算opening_circle和闭运算closing_circle的异同、AndroidCi
在这里,我们将给大家分享关于Hough circle检测精度非常低的知识,同时也会涉及到如何更有效地(转) 开运算opening_circle和闭运算closing_circle的异同、Android Circle进度栏-显示值通常为Double Double、android – Gradle assembleDebug和preDexDebug因CircleCI而失败、Android(手机)视觉相机亮度非常低的内容。
本文目录一览:- Hough circle检测精度非常低
- (转) 开运算opening_circle和闭运算closing_circle的异同
- Android Circle进度栏-显示值通常为Double Double
- android – Gradle assembleDebug和preDexDebug因CircleCI而失败
- Android(手机)视觉相机亮度非常低
Hough circle检测精度非常低
我正在尝试从看起来具有
很好清晰度的图像中检测出圆形。我确实意识到圈子的一部分丢失了,但是从
我读到的有关霍夫变换的内容来看,这似乎并不会
导致我遇到的问题。
Code:
// Read the imageMat src = Highgui.imread("input.png");// Convert it to grayMat src_gray = new Mat();Imgproc.cvtColor(src, src_gray, Imgproc.COLOR_BGR2GRAY);// Reduce the noise so we avoid false circle detection//Imgproc.GaussianBlur( src_gray, src_gray, new Size(9, 9), 2, 2 );Mat circles = new Mat();/// Apply the Hough Transform to find the circlesImgproc.HoughCircles(src_gray, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 1, 160, 25, 0, 0);// Draw the circles detectedfor( int i = 0; i < circles.cols(); i++ ) { double[] vCircle = circles.get(0, i); Point center = new Point(vCircle[0], vCircle[1]); int radius = (int) Math.round(vCircle[2]); // circle center Core.circle(src, center, 3, new Scalar(0, 255, 0), -1, 8, 0); // circle outline Core.circle(src, center, radius, new Scalar(0, 0, 255), 3, 8, 0);}// Save the visualized detection.String filename = "output.png";System.out.println(String.format("Writing %s", filename));Highgui.imwrite(filename, src);
我把高斯模糊注释掉了,因为(直觉上反),这
极大地增加了发现同样不准确的圆的数量。
我的输入图像有什么问题会导致Hough无法正常工作
吗?我的参数有问题吗?
编辑:第一个答案带来了一个关于
霍夫最小/最大半径提示的好点。我拒绝添加这些参数,因为本文中的示例图像
只是半径从20到几乎
无限变化的数千幅图像之一。
答案1
小编典典如果您正确设置minRadius
和设置maxRadius
参数,它将为您带来
良好的效果。
对于您的图片,我尝试了以下参数。
method - CV_HOUGH_GRADIENTminDist - 100dp - 1param1 - 80param2 - 10minRadius - 250maxRadius - 300
注意:我在C ++中尝试过此操作。
(转) 开运算opening_circle和闭运算closing_circle的异同
从去除毛刺的策略看开运算opening_circle和闭运算closing_circle的异同
例一:毛刺在往外凸的面上
策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域。
1 read_image (Tu, ''C:/Users/xiahui/Desktop/tu.jpg'')
2 binary_threshold (Tu, Region, ''max_separability'', ''dark'', UsedThreshold)
3 opening_circle (Region, RegionOpening, 50.5)
4 difference (Region, RegionOpening, RegionDifference)
5 dev_display (Tu)
6 dev_display (RegionDifference)
可以看到,虽然毛刺被分割出来了,但是多出了4块干扰的区域。原因是执行opening_circle时,四个尖角被削平了。
开运算是先腐蚀再膨胀。腐蚀之后,毛刺被削没了,但是4个尖角大致保持以前的形状;4个尖角再经过膨胀运算后,就变得不尖了。
策略2:分割出白色部分,然后通过闭运算封闭凹槽,再通过闭运算之后的区域减去原白色部分区域,得到毛刺部分的区域。
1 read_image (Tu, ''C:/Users/xiahui/Desktop/tu.jpg'')
2 binary_threshold (Tu, Region, ''max_separability'', ''light'', UsedThreshold)
3 closing_circle (Region, RegionClosing, 50.5)
4 difference (RegionClosing, Region, RegionDifference)
5 dev_display (Tu)
6 dev_display (RegionDifference)
分割效果很好。
例二:毛刺在往内凹的面上
策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域。
1 read_image (Ao, ''C:/Users/xiahui/Desktop/ao.jpg'')
2 binary_threshold (Ao, Region, ''max_separability'', ''dark'', UsedThreshold)
3 opening_circle (Region, RegionOpening, 50.5)
4 difference (Region, RegionOpening, RegionDifference)
5 dev_display (Ao)
6 dev_display (RegionDifference)
分割效果不佳,现象和原因同例一。
策略2:分割出白色部分,然后通过闭运算封闭凹槽,再通过闭运算之后的区域减去原白色部分区域,得到毛刺部分的区域。
1 read_image (Ao, ''C:/Users/xiahui/Desktop/ao.jpg'')
2 binary_threshold (Ao, Region, ''max_separability'', ''light'', UsedThreshold)
3 closing_circle (Region, RegionClosing, 50.5)
4 difference (RegionClosing, Region, RegionDifference)
5 dev_display (Ao)
6 dev_display (RegionDifference)
分割效果很好。
说明:
以上的opening_circle (Region, RegionOpening, 50.5)可以用下面的代码来完全等效:
set_system (''tsp_clip_region'', ''false'')
erosion_circle (Region, RegionErosion1, 50.5)
dilation_circle (RegionErosion1, RegionDilation, 50.5)
(set_system (''tsp_clip_region'', ''false'')的意思是当region(一般是膨胀以后)超过图像区域时,不修剪region)
下面我通过一些简单图形来观察开运算(腐蚀—膨胀)和闭运算(膨胀—腐蚀)的执行效果。
用腐蚀、膨胀算子来模拟开运算的过程:

1 *模拟开运算
2 set_system (''tsp_clip_region'', ''false'')
3 read_image (Rect, ''C:/Users/xiahui/Desktop/Rect.jpg'')
4 binary_threshold (Rect, Region, ''max_separability'', ''dark'', UsedThreshold)
5 erosion_circle (Region, RegionErosion, 30.5)
6 dilation_circle (RegionErosion, RegionDilation, 30.5)
7 dev_display (Rect)
8 dev_display (RegionDilation)

(这个星花腐蚀和膨胀值要小些,不然没有上图的效果)
用膨胀、腐蚀算子来模拟闭运算的过程:

1 *模拟闭运算
2 set_system (''tsp_clip_region'', ''false'')
3 read_image (Rect, ''C:/Users/xiahui/Desktop/rect.jpg'')
4 binary_threshold (Rect, Region, ''max_separability'', ''dark'', UsedThreshold)
5 dilation_circle (Region, RegionDilation, 30.5)
6 erosion_circle (RegionDilation, RegionErosion, 30.5)
7 dev_display (Rect)
8 dev_display (RegionErosion)

(矩形闭运算后可完全复原)
(正八边形闭运算后可完全复原)
叠加在一起看看:
(无法复原)
结论:
1、膨胀会使尖角变平滑。
2、对于凸多边形来说(可用shape_trans (Region, RegionTrans, ''convex'')生成凸多边形),腐蚀以后,region的外形特征保持不变,矩形腐蚀以后仍是矩形,三角形腐蚀以后还是三角形。
3、对于非凸多边形来说,腐蚀以后,region的外形特征大致保持不变,但是如果region的尖角特别细,则会腐蚀掉,这样region的形状就会发生较大变化。
4、圆角腐蚀以后,可能变成尖角。
5、开运算会使尖角变平滑。
6、对于凸多边形来说,闭运算之后,region不发生任何变化。
7、对于有凹槽的非凸多边形来说,闭运算之后region的凹槽被填充。第一步膨胀过程中,夹角变圆角,第二步腐蚀过程中,圆角又可能复原成了尖角(见第4条)。
Android Circle进度栏-显示值通常为Double Double
如何解决Android Circle进度栏-显示值通常为Double Double?
在我的项目中,我需要使用Circle Progress Bar。 我发现了一个非常有趣的存储库:https://github.com/lzyzsd/CircleProgress
但是我有问题。我需要在圆形进度条上显示Double类型的值,但需要Integer。
虽然我可以将进度削减到Integer,但必须在Double中显示它。
我需要帮助来解决这个问题或其他解决方案。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
android – Gradle assembleDebug和preDexDebug因CircleCI而失败
为什么我不能这样做?
>使用ProductFlavor(名称为生产)
> Android Gradle ver.1.1.0-rc1
问题
./gradlew assembleProductionDebug died unexpectedly Building 92%3% >
:app:preDexProductionDebugaction ./gradlew assembleProductionDebug
Failed
circle.yml
general: artifacts: - "app/build/outputs/apk/app-production-release-unaligned.apk" machine: java: version: openjdk7 environment: ANDROID_HOME: /usr/local/android-sdk-linux dependencies: pre: - echo y | android update sdk --no-ui --all --filter "build-tools-21.1.2" - echo y | android update sdk --no-ui --all --filter "platform-tools" - echo y | android update sdk --no-ui --all --filter "tools" - echo y | android update sdk --no-ui --all --filter "extra-google-google_play_services" - echo y | android update sdk --no-ui --all --filter "extra-google-m2repository" - echo y | android update sdk --no-ui --all --filter "extra-android-m2repository" - echo y | android update sdk --no-ui --all --filter "extra-android-support" - echo y | android update sdk --no-ui --all --filter "android-21" - git submodule sync - git submodule update --init cache_directories: - ~/.android - ~/android override: - ./gradlew dependencies test: override: - ./gradlew test deployment: master: branch: master commands: - ./gradlew assembleProductionDebug
解决方法
把它放在root build.gradle中:
project.ext.preDexLibs = !project.hasProperty('disablePreDex') subprojects { project.plugins.whenPluginAdded { plugin -> if ("com.android.build.gradle.AppPlugin".equals(plugin.class.name)) { project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs } else if ("com.android.build.gradle.LibraryPlugin".equals(plugin.class.name)) { project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs } } }
然后,您可以使用以下命令构建ci:
./gradlew ... -PdisablePreDex
Android(手机)视觉相机亮度非常低
http://code.tutsplus.com/tutorials/reading-qr-codes-using-the-mobile-vision-api–cms-24680
除了相机视图亮度外,一切看起来都很好.与我的实际Android相机应用程序相比,这里的相机视图非常暗.
如果我可以增加相机的亮度并打开任何低光设置,请告诉我.谢谢 .
图片 :
Camera picture
,
App Camera view picture
解决方法
好像fps计数与亮度有关.
我的构建器看起来像这样:
CameraSource cameraSource = new CameraSource.Builder(getActivity(),barcodeDetector) .setFacing(CameraSource.CAMERA_FACING_BACK) .setRequestedPreviewSize(1600,1024) .setRequestedFps(15.0f) .setAutoFocusEnabled(true) .build();
今天的关于Hough circle检测精度非常低的分享已经结束,谢谢您的关注,如果想了解更多关于(转) 开运算opening_circle和闭运算closing_circle的异同、Android Circle进度栏-显示值通常为Double Double、android – Gradle assembleDebug和preDexDebug因CircleCI而失败、Android(手机)视觉相机亮度非常低的相关知识,请在本站进行查询。
本文标签: