2017-07-02 14 views
0

私はこのコードを書いて長方形を検出しましたが、角を検出するコードを書くことはできません。ここでJavaでopenCvの長方形の角を見つける方法

public class RectDetection { 
    public static void main(String[] args) { 


System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
Mat rectengle=Imgcodecs.imread("D:\\sepano\\rect.png"); 
     Mat img =new Mat(); 
     img=rectengle.clone(); 
     Imgproc.cvtColor(rectengle, img, Imgproc.COLOR_BGR2GRAY); 
     Imgproc.GaussianBlur(img, img, new org.opencv.core.Size(1, 1), 2, 2); 
    Imgproc.Canny(img,img,3, 3,5,false); 

    List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); 
    Imgproc.findContours(img, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); 

    MatOfPoint temp_contour = contours.get(0); //the largest is at the index 0 for starting point 

    for (int idx = 0; idx < contours.size(); idx++) { 
     temp_contour = contours.get(idx); 
      MatOfPoint2f new_mat = new MatOfPoint2f(temp_contour.toArray()); 
      int contourSize = (int)temp_contour.total(); 
      MatOfPoint2f approxCurve_temp = new MatOfPoint2f(); 
      Imgproc.approxPolyDP(new_mat, approxCurve_temp, contourSize*0.05, true); 
    if (approxCurve_temp.total()==8) { 
       MatOfPoint points = new MatOfPoint(approxCurve_temp.toArray()); 
       Rect rect = Imgproc.boundingRect(points); 
       Imgproc.rectangle(img, new Point(rect.x,rect.y), new Point(rect.x+rect.width,rect.y+rect.height), new Scalar(170,0,150,0), 5);}} 

は、コーナー検出のためのPythonのコードですが、私は、Javaに変換することはできません。

import numpy as np 
import cv2 
from matplotlib import pyplot as plt 

img = cv2.imread('simple.jpg') 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 

corners = cv2.goodFeaturesToTrack(gray,25,0.01,10) 
corners = np.int0(corners) 

for i in corners: 
    x,y = i.ravel() 
    cv2.circle(img,(x,y),3,255,-1) 

plt.imshow(img),plt.show() 

は、いずれかが私を助けることができる????密接にJavaコードで

答えて

0

ルック...このラインで

Imgproc.rectangle(img, new Point(rect.x,rect.y), new Point(rect.x+rect.width,rect.y+rect.height), new Scalar(170,0,150,0), 5);

Point(rect.x,rect.y)はあなたの四角形の左上隅に対応し、Point(rect.x+rect.width,rect.y+rect.height)はの右下隅に対応しますあなたの四角形。

矩形検出コードが十分でなければならない、と次のように4つのコーナーは、次のとおりです。

Point(rect.x,rect.y) //左上

Point(rect.x+rect.width,rect.y) //右上

Point(rect.x,rect.y+rect.height) //左下

Point(rect.x+rect.width,rect.y+rect.height) //ボトム右

関連する問題