4
我試圖創建一個代碼,它應該在最後識別圖片中的某個圖案/形狀。使用JavaCV在圖像中檢測圖案
我試圖在圖片上繪製圖形(本例中爲「Output3」)時遇到了一些麻煩。該程序似乎不會結束。我認爲while函數有一個無限循環。 程序不顯示output3。有什麼問題?
INPUT圖像:
OUTPUT2圖像:
public class Hello {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
// Memory storage
CvMemStorage memory = CvMemStorage.create();
CvSeq contours = new CvSeq(null);
// Display original contour image .png, then GRAYSCALE and display in CanvasFrame
IplImage image = cvLoadImage("contour.jpg", CV_LOAD_IMAGE_GRAYSCALE);
CanvasFrame canvas = new CanvasFrame("Output", 1);
CanvasFrame canvas2 = new CanvasFrame("Output2", 1);
CanvasFrame canvas3 = new CanvasFrame("Output3", 1);
canvas.showImage(image);
// thresholding
cvSmooth(image, image, CV_BLUR, 9 , 9, 2, 2);
cvThreshold(image, image, 155, 255, CV_THRESH_BINARY);
cvCanny(image, image, 20*7*7, 40*7*7, 7);
cvDilate(image, image, null, 1);
canvas2.showImage(image);
cvSaveImage("output2.jpg", image);
// finding contours
cvFindContours(image, memory, contours, Loader.sizeof(CvContour.class), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
while(contours != null && !contours.isNull()) {
if(contours.elem_size() > 0) {
CvSeq approx = cvApproxPoly(contours, Loader.sizeof(CvContour.class), memory, CV_POLY_APPROX_DP, (int) cvContourPerimeter(contours)*0.02, 0);
cvDrawContours(image, approx, CvScalar.BLUE, CvScalar.BLUE, -1,1, CV_AA);
}
contours.h_next();
}
canvas3.showImage(image);
}
我的目標是拍攝照片,發送到它應該會返回程序:
- 這是一個方形
- 這是矩形
- 這是一個圓
- 這是一個六邊形