在java中使用openCV遍历红色,像素遍历(仅限java)

分享给java的同学

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

不用多废话,直接

/**
 * 遍历图片中全部红色部分
 * @author Administrator
 *
 */
public class Test3 {
	public static void main(String[] args) {
		//导入dll
		String relativelyPath = System.getProperty("user.dir");
		System.load(relativelyPath + "\\lib\\opencv_java310.dll");
		//扫描图片地址
		Mat mat = Imgcodecs.imread("E:/12.png");
		//扫描后的图片
		Mat hsv_image = new Mat(mat.size(), mat.type());
		Mat mat2=new Mat(mat.size(), mat.type());
		//将图片的格式转为HSV模式,原来为RGB
		Imgproc.cvtColor(mat, hsv_image, Imgproc.COLOR_BGR2HSV);
		// 色调(H),饱和度(S),明度(V)
		// 下面就可以进行颜色的提取了
		int num=0;
		int num_rows = hsv_image.rows();
		int num_col = hsv_image.cols();
		for (int i = 0; i < num_rows; i++) {
			for (int j = 0; j < num_col; j++) {
				System.out.println("i:"+i+"  j:"+j);
				// 获取每个像素
				double[] clone = hsv_image.get(i, j).clone();
				double hun = clone[0]; // HSV hun

				if ((hun >= 0 && hun < 10) || (hun > 156 && hun < 180)) {
					if (clone[1] > 35 && clone[1] < 255) {
						if (clone[2] < 255 && clone[2] > 46) {
							// 红色范围,全部设置为黑色,
							clone[0] = 0;
							clone[1] = 0;
							clone[2] = 255;
							num++;
							mat2.put(i, j, clone);
						}
					}
				}
			}
		}
		System.out.println(num);
		String filename = "E:/gray.png";			
		//保存图像到Result目录中
		Imgcodecs.imwrite(filename, mat2);	
	}

原图:

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

结果如下:

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

效果相对模糊

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

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





你可能感兴趣的:(opencv)