Java OpenCV 图像处理33 视频分析和对象跟踪 角点检测
package com.xu.opencv.video;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.highgui.HighGui;
import org.opencv.imgproc.Imgproc;
import org.opencv.videoio.VideoCapture;
public class Corner {
MatOfPoint corners=new MatOfPoint();
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
Corner corner=new Corner();
corner.corners();
}
private void corners() {
VideoCapture capture=new VideoCapture();
capture.open("C:\\Users\\hyacinth\\Videos\\111.mp4");
int index=0;
Mat video=new Mat();
Mat gray=new Mat();
int maxCorners=5000;
double qualityLevel=0.01;
int minDistance=10;
int blockSize=3;
int gradientSize=5;
double k=0.04;
while (capture.read(video)) {
Imgproc.cvtColor(video, gray, Imgproc.COLOR_BGR2GRAY);
Imgproc.goodFeaturesToTrack(gray, corners, maxCorners, qualityLevel, minDistance, new Mat(), blockSize, gradientSize, false, k);
drawCorners(video,corners);
HighGui.imshow("角点检测", video);
index=HighGui.waitKey(1);
if (index==27) {
capture.release();
return;
}
}
}
private void drawCorners(Mat mat,MatOfPoint corners) {
int[] cornersData = new int[(int) (corners.total() * corners.channels())];
corners.get(0, 0, cornersData);
for (int i = 0; i < corners.rows(); i++) {
Imgproc.circle(mat, new Point(cornersData[i * 2], cornersData[i * 2 + 1]), 2, new Scalar(0, 0,255), Imgproc.FILLED);
}
}
}