久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

使用 Opencv 檢測圖像中矩形的中心和角度

Detect centre and angle of rectangles in an image using Opencv(使用 Opencv 檢測圖像中矩形的中心和角度)
本文介紹了使用 Opencv 檢測圖像中矩形的中心和角度的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我有一張如下圖:

我需要找出矩形的數(shù)量,每個(gè)矩形的中心,并測量與穿過中心的矩形長邊平行的軸之間的角度,并測量從水平方向逆時(shí)針方向的角度.我發(fā)現(xiàn)了圖像中矩形的數(shù)量.我很驚訝地發(fā)現(xiàn)了反射的中心和角度.通過瞬間找到中心并沒有給我正確的答案.

I need to find out the number of rectangles,centre of each rectangle and the measure the angle between the axis parallel to the longer edge of the rectangle passing through centre and measure the angle in anti-clockwise direction from the horizontal.I found out the number of rectangles in the image.I'm struck in finding out the centre and angle of reflection.Finding the centre through moments is not giving me the correct answer.

我的代碼:

import cv2
import numpy as np 
import sys

img = cv2.imread(str(sys.argv[1]),0)
ret,thresh = cv2.threshold(img,127,255,0)
contours,hierarchy = cv2.findContours(thresh,1,2)



for contour in contours:
    area = cv2.contourArea(contour)
    if area>100000:
        contours.remove(contour)




cnt = contours[0]

epsilon = 0.02*cv2.arcLength(cnt,True)
approx = cv2.approxPolyDP(cnt,epsilon,True)

print 'No of rectangles',len(approx)


#finding the centre of the contour
M = cv2.moments(cnt)

cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])

print cx,cy

推薦答案

使用openCV的minAreaRect函數(shù)可以做到這一點(diǎn).它是用 C++ 編寫的,但您可能很容易適應(yīng)它,因?yàn)閹缀踔皇褂昧?OpenCV 函數(shù).

This is how you can do it with minAreaRect function of openCV. It's written in C++ but probably you can adapt that easily, since nearly only OpenCV functions were used.

    cv::Mat input = cv::imread("../inputData/rectangles.png");

    cv::Mat gray;
    cv::cvtColor(input,gray,CV_BGR2GRAY);

    // since your image has compression artifacts, we have to threshold the image
    int threshold = 200;
    cv::Mat mask = gray > threshold;

    cv::imshow("mask", mask);

    // extract contours
    std::vector<std::vector<cv::Point> > contours;
    cv::findContours(mask, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);

    for(int i=0; i<contours.size(); ++i)
    {
        // fit bounding rectangle around contour
        cv::RotatedRect rotatedRect = cv::minAreaRect(contours[i]);

        // read points and angle
        cv::Point2f rect_points[4]; 
        rotatedRect.points( rect_points );

        float  angle = rotatedRect.angle; // angle

        // read center of rotated rect
        cv::Point2f center = rotatedRect.center; // center

        // draw rotated rect
        for(unsigned int j=0; j<4; ++j)
            cv::line(input, rect_points[j], rect_points[(j+1)%4], cv::Scalar(0,255,0));

        // draw center and print text
        std::stringstream ss;   ss << angle; // convert float to string
        cv::circle(input, center, 5, cv::Scalar(0,255,0)); // draw center
        cv::putText(input, ss.str(), center + cv::Point2f(-25,25), cv::FONT_HERSHEY_COMPLEX_SMALL, 1, cv::Scalar(255,0,255)); // print angle
    }

生成此圖像:

如您所見,角度可能不是您想要的(因?yàn)樗鼈冸S機(jī)使用較長或較小的線作為參考).您可以改為提取矩形的長邊并手動(dòng)計(jì)算角度.

as you can see, the angles are probably not what you want (because they randomly use the longer or the smaller line as reference). You can instead extract the longer sides of the rectangles and compute the angle manually.

如果您選擇旋轉(zhuǎn)矩形的較長邊緣并從中計(jì)算角度,它看起來像這樣:

If you choose the longer edge of the rotated rects and compute the angle from it it looks like this:

// choose the longer edge of the rotated rect to compute the angle
        cv::Point2f edge1 = cv::Vec2f(rect_points[1].x, rect_points[1].y) - cv::Vec2f(rect_points[0].x, rect_points[0].y);
        cv::Point2f edge2 = cv::Vec2f(rect_points[2].x, rect_points[2].y) - cv::Vec2f(rect_points[1].x, rect_points[1].y);

        cv::Point2f usedEdge = edge1;
        if(cv::norm(edge2) > cv::norm(edge1))
            usedEdge = edge2;

        cv::Point2f reference = cv::Vec2f(1,0); // horizontal edge


        angle = 180.0f/CV_PI * acos((reference.x*usedEdge.x + reference.y*usedEdge.y) / (cv::norm(reference) *cv::norm(usedEdge)));

給出這個(gè)結(jié)果,這應(yīng)該是你要找的!

giving this result, which should be what you are looking for!

看起來操作沒有使用他發(fā)布的輸入圖像,因?yàn)閰⒖季匦沃行膶⑽挥趫D像之外.

It looks like the op doesn't use the input image he posted, because reference rectangle centres would lie outside of the image.

使用此輸入(手動(dòng)重新調(diào)整但可能仍不是最佳):

Using this input (manually rescaled but probably still not optimal):

我得到了這些結(jié)果(藍(lán)點(diǎn)是操作提供的參考矩形中心):

I get those results (blue dots are reference rectangle centers provided by the op):

比較參考與檢測:

reference (x,y,angle)    detection (x,y,angle)
(320,240,0)              (320, 240, 180) // angle 180 is equal to angle 0 for lines
(75,175,90)              (73.5, 174.5, 90)
(279,401,170)            (279.002, 401.824, 169.992)
(507,379,61)             (507.842, 379.75, 61.1443)
(545,95,135)             (545.75, 94.25, 135)
(307,79,37)              (306.756, 77.8384, 37.1042)

我很想看到真實(shí)的輸入圖像,也許結(jié)果會(huì)更好.

I would love to see the REAL input image though, maybe the result will be even better.

這篇關(guān)于使用 Opencv 檢測圖像中矩形的中心和角度的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

How to draw a rectangle around a region of interest in python(如何在python中的感興趣區(qū)域周圍繪制一個(gè)矩形)
How can I detect and track people using OpenCV?(如何使用 OpenCV 檢測和跟蹤人員?)
How to apply threshold within multiple rectangular bounding boxes in an image?(如何在圖像的多個(gè)矩形邊界框中應(yīng)用閾值?)
How can I download a specific part of Coco Dataset?(如何下載 Coco Dataset 的特定部分?)
Detect image orientation angle based on text direction(根據(jù)文本方向檢測圖像方向角度)
Calculating percentage of Bounding box overlap, for image detector evaluation(計(jì)算邊界框重疊的百分比,用于圖像檢測器評估)
主站蜘蛛池模板: 欧美在线视频a | 日韩视频在线观看中文字幕 | 国产美女自拍视频 | 亚洲免费成人av | 精品免费av | 国产亚洲网站 | 国产美女视频黄 | 在线视频亚洲 | 99精品亚洲国产精品久久不卡 | 国产精品久久久久久中文字 | 国产精品免费大片 | 国产精品亚洲综合 | 国产精品久久久久久影院8一贰佰 | 国产精品久久久久久福利一牛影视 | 日韩不卡在线观看 | 欧洲高清转码区一二区 | 日韩在线一区二区三区 | 精品久久国产视频 | 久久久观看 | 成人看片在线观看 | 欧美视频在线播放 | av黄色免费| 日韩精品一区二区三区四区 | 一级a性色生活片久久毛片 午夜精品在线观看 | 久久天天综合 | 天堂资源最新在线 | 久在线精品视频 | 日韩中文电影 | 99久久精品免费看国产四区 | 国产精品一区二区在线免费观看 | 国产精品不卡视频 | 亚洲网址在线观看 | av大片 | 日韩国产一区二区 | 91亚洲国产成人久久精品网站 | 日日天天 | 日韩av视屏 | www.4hu影院 | 日韩国产在线观看 | 国产精品一二三区 | 免费在线看黄视频 |