整个项目路径

https://download.csdn.net/download/Aaron121314/12291921

-------------------------------------------------------

使用opencv 来判断屏幕是否有坏点。

流程是这样的,先对着测试的手机屏幕拍照,然后剪切照片,把要检测的区域给截取出来,然后用Core.inRange 分析图片的每个像素的颜色,如果颜色在给定范围内就返回255 白色,不在就返回0黑色,最后生成一个新的Mat图片,一个黑白图片,最后我们去判断这个黑白图片,如果全是白色,说明没有坏点,给定的图片颜色都在给定颜色范围内,是用检测轮廓的方法来检测的,如果没有轮廓,就说明是都是白色,如果有黑点就会检测到轮廓,就说明有坏点。

截图

+ 点击选中要检测的图片资源

smin vmin是用来控制要检测颜色的深浅,默认可以不填。什么是hsv,去百度hsv颜色

x y width height  对图片资源进行剪切的范围

下拉列表,选择要检测的颜色

配置完成,点击button开始检测。检测结果会显示在右边的图片,同时会把不在范围内的颜色标记出来。这里检测蓝色,图片上有一些黑色的点,所以被标记出来了。

检测的原图

-------------------------------------------------------------------------------------

主要代码:

颜色判断,返回一个黑白的mat图片,分析图片的每个像素的颜色,如果颜色在给定范围内就返回255 白色,不在就返回0黑色

  private Mat analyseColor( Mat src ) {String color= (String) spinner.getSelectedItem();if(color.equals( "Red" )){hmin=HSV_Range[2][0];smin=HSV_Range[2][2];vmin=HSV_Range[2][4];hmax=HSV_Range[2][1];smax=HSV_Range[2][3];vmax=HSV_Range[2][5];}else if (color.equals( "Green" )){hmin=HSV_Range[3][0];smin=HSV_Range[3][2];vmin=HSV_Range[3][4];hmax=HSV_Range[3][1];smax=HSV_Range[3][3];vmax=HSV_Range[3][5];}else if (color.equals( "Blue" )){hmin=HSV_Range[4][0];smin=HSV_Range[4][2];vmin=HSV_Range[4][4];hmax=HSV_Range[4][1];smax=HSV_Range[4][3];vmax=HSV_Range[4][5];}else if (color.equals( "Black" )){hmin=HSV_Range[0][0];smin=HSV_Range[0][2];vmin=HSV_Range[0][4];hmax=HSV_Range[0][1];smax=HSV_Range[0][3];vmax=HSV_Range[0][5];}else if (color.equals( "White" )){hmin=HSV_Range[1][0];smin=HSV_Range[1][2];vmin=HSV_Range[1][4];hmax=HSV_Range[1][1];smax=HSV_Range[1][3];vmax=HSV_Range[1][5];}if(!v.getText().toString().isEmpty()){vmin=Integer.valueOf( v.getText().toString() );}if(!s.getText().toString().isEmpty()){smin=Integer.valueOf( s.getText().toString() );}Mat hsv = new Mat();Imgproc.cvtColor( src, hsv, Imgproc.COLOR_RGBA2BGR );Imgproc.cvtColor( hsv, hsv, Imgproc.COLOR_BGR2HSV );Mat r = new Mat();Core.inRange( hsv, new Scalar( hmin, smin, vmin ),new Scalar( hmax, smax, vmax), r );return r;}

判断是否有坏点(轮廓)

   private void getPoints(Mat src){Mat hierarchy=new Mat(  );Mat edge=new Mat(  );Imgproc.Canny(src,edge,10,200,3,true);List<MatOfPoint> contours=new ArrayList<>();//轮廓检测 CHAIN_APPROX_SIMPLEImgproc.findContours(edge,contours,hierarchy,Imgproc.RETR_CCOMP,Imgproc.CHAIN_APPROX_SIMPLE);Mat mRgba=new Mat();mRgba.create(edge.rows(), edge.cols(), CvType.CV_8UC3);Bitmap b12= Bitmap.createBitmap(edge.cols(), edge.rows(),Bitmap.Config.ARGB_8888);if (contours.size()>0){int i=0;Log.i( "aaron","size "+contours.size() );MatOfPoint temp_contour=contours.get(0);//假设最大的轮廓在index=0处MatOfPoint2f approxCurve=new MatOfPoint2f();// Imgproc.drawContours(test, contours, -1, new Scalar(0,255,0), 1);//get pointsList<MatOfPoint2f> newContours = new ArrayList<>();for(MatOfPoint point : contours) {MatOfPoint2f newPoint = new MatOfPoint2f(point.toArray());Log.i( "aaron","MatOfPoint2f "+                newPoint.total() );double[] temp;Log.i( "aaron","Point----------------- ");for (int j=0;j<newPoint.total();j++){temp=newPoint.get( j,0 );Point point1=new Point( temp[0],temp[1] );Log.i( "aaron","Point "+ point1);}Log.i( "aaron","----------------- ");newContours.add(newPoint);}Log.i( "aaron","轮廓数量:  "+contours.size() );Log.i( "aaron","hierarchy类型:  "+hierarchy);for(int k=0;k<hierarchy.cols();k++) {double[] ds = hierarchy.get(0, k);Log.i( "aaron","------------------  ");Log.i( "aaron","轮廓下标:  "+k );for (int l=0;l<ds.length;l++) {switch (l) {case 0:Log.i( "aaron","后一个轮廓下标:  "+ds[l] );break;case 1:Log.i( "aaron","前一个轮廓下标:  "+ds[l] );break;case 2:Log.i( "aaron","父轮廓下标:  "+ds[l] );break;case 3:Log.i( "aaron","内嵌轮廓下标:  "+ds[l] );break;default:break;}}}for (int idx=0;idx<contours.size();idx++) {//    Rect rect= Imgproc.boundingRect( contours.get( idx ) );//    Log.i( "aaron","rect  "+rect.x+" "+rect.y+"  "+rect.width+"  "+rect.height );//    Imgproc.rectangle( test,new Point( rect.x,rect.y ),new Point( rect.x+rect.width,rect.y+rect.height ),new Scalar( 0,255,0 ) );temp_contour = contours.get( idx );Imgproc.drawContours(test, contours, idx, new Scalar(0,255,0), 2);double contourarea = Imgproc.contourArea( temp_contour );if (contourarea>0){Log.i( "aaron","area  "+contourarea );//   Imgproc.drawContours(test, contours, idx, new Scalar(0,255,0), 1);
//i++;}}Log.i( "aaron","area size "+i );result.setText( "fail  " );Utils.matToBitmap(test,b12);saveBitmap( b12 ,"1");img3.setImageBitmap( b12 );}else {result.setText( "pass" );}}

Android opencv 检测屏幕是否有坏点/检测一个颜色是否有杂点相关推荐

  1. linux坏道检测修复脚本,Linux 磁盘坏道检测和修复

    使用dmesg检查是否有关于磁盘错误的信息,果不其然发现大量磁盘扇区错误的信息,如下: end_request:I/O error, dev 03:06 (sda), sector 从上面的输出我们判 ...

  2. 屏幕坏点检测图片_电视屏幕出现坏点怎么办?

    家里的液晶电视出现坏点,应该怎么处理?今天小智和大家分享一个解决电视坏点的方法,一起看看吧! 液晶屏幕由很多点组成,每个点由RGB三原色像素不断变化形成颜色以及图像.但是 当像素点出现问题,让颜色不能 ...

  3. 屏幕坏点检测图片_电视屏幕出现坏点?行家会这样做!

    液晶电视经常会有几个亮点或暗点,这些通常被称为电视坏点.作为强迫症患者,面对这些屏幕坏点我们应该怎么做?下面跟小智聊聊这个问题吧! 首先,坏点形成的原因首先是因为液晶屏幕由很多点组成,每个点由RGB三 ...

  4. 检测屏幕.html,在线检测显示器屏幕尺寸

    1.我们在桌面新建一个文本文档,并且打开. 2. 在文档里添加以下HTML代码. 特效演示_JS测试显示器分辨率 document.write('您的显示器分辨率为:\n' + screen.widt ...

  5. [安装程序]HDDScan(硬盘坏道检测工具) 3.3[详细检测你的硬盘信息]

    [安装程序]HDDScan(硬盘坏道检测工具) 3.3[详细检测你的硬盘信息] 软件名称:HDDScan(硬盘坏道检测工具) 3.3[详细检测你的硬盘信息] 软件大小:1.74 MB 软件类型:国产软 ...

  6. 屏幕坏点检测图片_【沙发管家】教你自己测试智能电视屏幕

    在很多用户的概念中,买电视最重要的就是看电视屏幕好不好,一般来说,屏幕越好电视所表现出来的画质也会越出色.然而在选购了新的电视机后,我们该如何保证拿到手的这台电视屏幕质量是过关的呢?没有专业测试工具的 ...

  7. 通过 debug 检测屏幕颜色显示坏点、低格硬盘等等技巧

    为了检测LCD屏幕是否存在坏点,可以将整个屏幕填充为红.绿.蓝.白等纯色,以便检查.下面给出几个常用的显示屏检测F命令(Debug窗口一般较小,按Alt+Enter将它放大到整个屏幕): F B800 ...

  8. 检测屏幕颜色显示坏点的一个小方法。(还有别的)

    通过 debug 检测屏幕颜色显示坏点.低格硬盘等等技巧 通过如下方法,可以方便地在手头么有工具特情况下检测LCD显示器的坏点 购买LCD显示器最忌有亮点或暗点,我们可以借助相关的检测软件来辅助查看, ...

  9. 什么软件测试手机亮度,手机屏幕坏点检测方法有哪些【详细介绍】

    手机屏幕坏点检测方法有哪些? 随着手机彩屏的逐渐普遍,手机屏幕的材质也越来越显得重要.手机的彩色屏幕因为LCD品质和研发技术不同而有所差异,其种类大致有TFT.TFD.UFB.STN和OLED几种. ...

  10. python检测屏幕亮点_图像处理之坏点校正及源码实现

    1 坏点介绍 图像坏点(Bad pixel) : 图像传感器上光线采集点(像素点)所形成的阵列存在工艺上的缺陷,或光信号进行转化为电信号的过程中出现错误,从而会造成图像上像素信息错误,导致图像中的像素 ...

最新文章

  1. Windows UWP开发系列 – 3D变换
  2. Ajax 网页异步调用
  3. 使用Quarkus在Openshift上构建微服务的快速指南
  4. html5up ui开源框架,ZUI-HTML5前端 UI 框架
  5. Transformer再下一城!low-level多个任务榜首被占领,北大华为等联合提出预训练模型IPT
  6. vs.net 2005 中自定义模版项
  7. 一文详解Kafka API
  8. 【Nginx】上传文件的大小限制
  9. 【优化覆盖】基于matlab模因算法求解集群无线传感器网络中节能覆盖控制优化问题【含Matlab源码 1563期】
  10. 湖北省武汉市谷歌高清卫星地图下载
  11. 强大的头像制作神器微信小程序源码/支持外卖CPS等优惠劵小程序源码
  12. es拼音分词 大帅哥_Elasticsearch中文分词加拼音
  13. 四小龙变“四小虫”?AI独角兽们的AI+故事好不好讲?
  14. PDF文件怎么拆分页面,如何修改PDF内容
  15. 职业学校计算机教学总结报告,中职计算机教师教学工作总结(共6篇) .docx
  16. idea提交项目出现push rejected
  17. dragonfly数据库
  18. 软件测试周刊(第50期):归结起来,焦虑的原因就两条:想同时做很多事情,又想立即看到效果。
  19. python 学习笔记之手把手讲解如何使用原生的 urllib 发送网络请求
  20. [编程题]雀魂启动! C++

热门文章

  1. Java大数运算(BigInteger BigDecimal)
  2. Delphi使用ReportMachine制作小计和总计报表
  3. asrc调试_求助winavr编译的固件超出flash大小
  4. 【计量经济学导论】10. ARIMA模型
  5. MVVM模式基于开源VLC解码器WPF万能视频播放器
  6. 火热升级:360Safe VS 雅虎助手
  7. windows无法格式化u盘_U盘修复无法格式化的解决方法
  8. windows无法格式化u盘_台电u盘无法格式化怎么办 台电u盘无法格式化解决办法【介绍】...
  9. 互联网电视牌照商那点事
  10. 计算机上word如何批量打印,word批量调页面设置 关于Word如何批量打印