在java中使用openCV遍历红色,像素遍历

分享给java的同学

工作需要对图片中的印章进行提取,这就用到了opencv的像素遍历

不用多废话,直接


     
     
     
     
  1. /**
  2. * 遍历图片中全部红色部分
  3. * @author Administrator
  4. *
  5. */
  6. public class Test3 {
  7. public static void main(String[] args) {
  8. //导入dll
  9. String relativelyPath = System.getProperty( “user.dir”);
  10. System.load(relativelyPath + “\\lib\\opencv_java310.dll”);
  11. //扫描图片地址
  12. Mat mat = Imgcodecs.imread( “E:/12.png”);
  13. //扫描后的图片
  14. Mat hsv_image = new Mat(mat.size(), mat.type());
  15. Mat mat2= new Mat(mat.size(), mat.type());
  16. //将图片的格式转为HSV模式,原来为RGB
  17. Imgproc.cvtColor(mat, hsv_image, Imgproc.COLOR_BGR2HSV);
  18. // 色调(H),饱和度(S),明度(V)
  19. // 下面就可以进行颜色的提取了
  20. int num= 0;
  21. int num_rows = hsv_image.rows();
  22. int num_col = hsv_image.cols();
  23. for ( int i = 0; i < num_rows; i++) {
  24. for ( int j = 0; j < num_col; j++) {
  25. System.out.println( “i:”+i+ ” j:”+j);
  26. // 获取每个像素
  27. double[] clone = hsv_image.get(i, j).clone();
  28. double hun = clone[ 0]; // HSV hun
  29. if ((hun >= 0 && hun < 10) || (hun > 156 && hun < 180)) {
  30. if (clone[ 1] > 35 && clone[ 1] < 255) {
  31. if (clone[ 2] < 255 && clone[ 2] > 46) {
  32. // 红色范围,全部设置为黑色,
  33. clone[ 0] = 0;
  34. clone[ 1] = 0;
  35. clone[ 2] = 255;
  36. num++;
  37. mat2.put(i, j, clone);
  38. }
  39. }
  40. }
  41. }
  42. }
  43. System.out.println(num);
  44. String filename = “E:/gray.png”;
  45. //保存图像到Result目录中
  46. Imgcodecs.imwrite(filename, mat2);
  47. }

原图:

在java中使用openCV遍历红色,像素遍历_第1张图片

结果如下:

在java中使用openCV遍历红色,像素遍历_第2张图片

效果相对模糊

实现了对红色印章的像素遍历,如果要判断图片中是否有印章,还需要使用霍夫圆来识别图片中的圆,详细操作可以看我其他帖子霍夫圆识别

如果大家有问题,可以在评论提出





你可能感兴趣的:(csdn转载)