代码解释: 算法原理: private Mat clearLiuDing(Mat img) { final int x = this.liuDingSize; Mat jump = Mat.zeros(1, img.rows(), CV_32F).asMat(); CoreFunc.showImage("test", jump); System.err.println("图像总行数:"+img.rows()); for (int i = 0; i < img.rows(); i++) { int jumpCount = 0; for (int j = 0; j < img.cols() - 1; j++) { if (img.ptr(i, j).get() != img.ptr(i, j + 1).get()) jumpCount++; } System.err.println("总数:"+jumpCount); System.err.println("第"+i+"行"); byte[] bt=Convert.getBytes((float) jumpCount); System.err.println("test:"+bt.length); //指定矩阵行的指针 BytePointer bp= jump.ptr(i); CoreFunc.showImage("test", jump); // bp.put(bt); System.err.println("test:end"); } for (int i = 0; i < img.rows(); i++) { if (Convert.toFloat(jump.ptr(i)) <= x) { for (int j = 0; j < img.cols(); j++) { img.ptr(i, j).put((byte) 0); } } } return img; }
时间: 2024-04-04 14:30:43 浏览: 18
算法原理:
1. 首先定义柳钉大小x,即相邻像素值不同的次数小于等于x的行被认为是柳钉。
2. 创建一个大小为[1, img.rows()]的浮点型矩阵jump,用来保存每行相邻像素值不同的次数。
3. 遍历图像的每一行,计算相邻像素值不同的次数jumpCount,将其保存到jump矩阵中对应行的位置。
4. 如果jump矩阵中该行的值小于等于柳钉大小x,则将图像该行的像素值全部设为0。
5. 返回处理后的图像。
具体实现过程:
1. 声明柳钉大小x和一个浮点型矩阵jump,其中矩阵的列数为img的行数。
2. 遍历img的每一行,计算相邻像素值不同的次数,将其保存到jump矩阵中对应行的位置。
3. 遍历jump矩阵的每一行,如果该行的值小于等于柳钉大小x,则将img该行的所有像素值设为0。
4. 返回处理后的图像。
此算法主要是用来去除车牌图像中柳钉的部分。
相关问题
解释这行代码 dst = Mat::zeros(src.size(), CV_8UC1);
这行代码也是在使用OpenCV库中的Mat类创建了一个名为dst的矩阵对象,并且初始化为全零。Mat::zeros()函数同样接受两个参数,第一个参数是矩阵的尺寸,这里使用了src.size()来获取与src具有相同尺寸的矩阵。第二个参数是矩阵的数据类型,CV_8UC1表示是一个单通道无符号8位整数型矩阵。因此,这行代码创建了一个与src相同尺寸的单通道无符号8位整数型矩阵,并将其初始化为全零。
解释这行代码 Mat dstx = Mat::zeros(src_board.size(), CV_32FC1)
这行代码是在使用OpenCV库中的Mat类创建了一个名为dstx的矩阵对象,并且初始化为全零。Mat::zeros()函数接受两个参数,第一个参数是矩阵的尺寸,这里使用了src_board.size()来获取与src_board具有相同尺寸的矩阵。第二个参数是矩阵的数据类型,CV_32FC1表示是一个单通道浮点型矩阵。因此,这行代码创建了一个与src_board相同尺寸的单通道浮点型矩阵,并将其初始化为全零。