no commit message

devA
yuxue 5 years ago
parent a40705f15a
commit 373370903d

@ -0,0 +1,131 @@
package com.yuxue.util;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import org.bytedeco.javacpp.BytePointer;
import org.bytedeco.javacpp.opencv_core;
import org.bytedeco.javacpp.opencv_core.Mat;
import org.bytedeco.javacpp.opencv_core.MatVector;
import org.bytedeco.javacpp.opencv_core.Size;
import org.bytedeco.javacpp.opencv_imgcodecs;
import org.bytedeco.javacpp.opencv_imgproc;
import com.google.common.collect.Maps;
/**
*
* @author yuxue
* @date 2020-05-18 12:07
*/
public class ImageUtil {
private static String DEFAULT_BASE_TEST_PATH = "D:/PlateDetect/temp/";
public static final int DEFAULT_GAUSSIANBLUR_SIZE = 5;
public static void main(String[] args) {
String tempPath = DEFAULT_BASE_TEST_PATH ;
FileUtil.createDir(tempPath); // 创建文件夹
// String filename = DEFAULT_BASE_TEST_PATH + "test01.jpg";
String filename = DEFAULT_BASE_TEST_PATH + "test.png";
Mat inMat = opencv_imgcodecs.imread(filename);
ImageUtil.rgb2Hsv(inMat, true, tempPath);
// ImageUtil.gaussianBlur(inMat, true, tempPath);
}
/**
* HSVH
* HSV广H, HueS,SaturationV, Value
* 1.PSH0-360S0%-100%V0%-100%
* 2.openCVcvSplitIPL_DEPTH_32FH0-360S0-10%-100%V0-10%-100%
* 3.openCVcvSplitIPL_DEPTH_8UCH0-180S0-255V0-255
* @param inMat
* @param debug
*/
public static void getHSVValue(Mat inMat, Boolean debug, String tempPath) {
int channels = inMat.channels();
int nRows = inMat.rows();
// 图像数据列需要考虑通道数的影响;
int nCols = inMat.cols() * channels;
// 连续存储的数据,按一行处理
if (inMat.isContinuous()) {
nCols *= nRows;
nRows = 1;
}
Map<Integer, Integer> map = Maps.newHashMap();
for (int i = 0; i < nRows; ++i) {
BytePointer p = inMat.ptr(i);
for (int j = 0; j < nCols; j += 3) {
int H = p.get(j) & 0xFF;
int S = p.get(j + 1) & 0xFF;
int V = p.get(j + 2) & 0xFF;
if(map.containsKey(H)) {
int count = map.get(H);
map.put(H, count+1);
} else {
map.put(H, 1);
}
}
}
Set set = map.keySet();
Object[] arr = set.toArray();
Arrays.sort(arr);
for (Object key : arr) {
System.out.println(key + ": " + map.get(key));
}
return;
}
/**
* rgbhsv
* @param inMat
* @param debug
* @param tempPath
* @return
*/
public static Mat rgb2Hsv(Mat inMat, Boolean debug, String tempPath) {
// 转到HSV空间进行处理
Mat hsvMat = new Mat(inMat.rows(), inMat.cols(), opencv_imgproc.CV_BGR2HSV);
opencv_imgproc.cvtColor(inMat, hsvMat, opencv_imgproc.CV_BGR2HSV);
MatVector hsvSplit = new MatVector();
opencv_core.split(hsvMat, hsvSplit);
// opencv_imgproc.equalizeHist(hsvSplit.get(2), hsvSplit.get(2));
// opencv_core.merge(hsvSplit, hsvMat);
if (debug) {
opencv_imgcodecs.imwrite(tempPath + "hsvMat_"+System.currentTimeMillis()+".jpg", hsvMat);
}
return hsvMat;
}
/**
*
* @param inMat
* @param debug
* @return
*/
public static Mat gaussianBlur(Mat inMat, Boolean debug, String tempPath) {
Mat gsMat = new Mat();
opencv_imgproc.GaussianBlur(inMat, gsMat, new Size(DEFAULT_GAUSSIANBLUR_SIZE, DEFAULT_GAUSSIANBLUR_SIZE), 0, 0, opencv_core.BORDER_DEFAULT);
if (debug) {
opencv_imgcodecs.imwrite(tempPath + "gaussianBlur.jpg", gsMat);
}
return gsMat;
}
}

@ -188,43 +188,6 @@ public class PlateRecoTest {
String imgPath = "res/image/test_image/debug_resize_2.jpg";
Mat src = opencv_imgcodecs.imread(imgPath);
// 获取绿牌的H值范围
/*MatVector hsvSplit = new MatVector();
split(src_hsv, hsvSplit);
equalizeHist(hsvSplit.get(2), hsvSplit.get(2));
merge(hsvSplit, src_hsv);
int channels = src_hsv.channels();
int nRows = src_hsv.rows();
// 图像数据列需要考虑通道数的影响;
int nCols = src_hsv.cols() * channels;
// 连续存储的数据,按一行处理
if (src_hsv.isContinuous()) {
nCols *= nRows;
nRows = 1;
}
Map<Integer, Integer> map = Maps.newHashMap();
for (int i = 0; i < nRows; ++i) {
BytePointer p = src_hsv.ptr(i);
for (int j = 0; j < nCols; j += 3) {
int H = p.get(j) & 0xFF;
int S = p.get(j + 1) & 0xFF;
int V = p.get(j + 2) & 0xFF;
if(map.containsKey(H)) {
int count = map.get(H);
map.put(H, count+1);
} else {
map.put(H, 1);
}
}
}
map.entrySet().forEach(n->{
System.err.println(n.getKey() + "\t" + n.getValue());
});*/
// 判断绿色车牌
Mat src_hsv = new Mat();
opencv_imgproc.cvtColor(src, src_hsv, opencv_imgproc.CV_BGR2HSV);

Loading…
Cancel
Save