rectangle(drawing, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0);
So, the coordinates of the upper left and lower right of the rectangle are shown, but I don't know how to use them to show the center of gravity.Br contains two data: x and y coordinates. Similarly, tl contains two data.
Can you send only the x coordinates of br and only the x coordinates of tl as x1 and x2 respectively?
#include "opencv2/highgui/highgui.hpp"
# include "opencv2/imgproc/imgproc.hpp"
# include <iostream>
# include <stdio.h>
# include <stdlib.h>
using namespace cv;
using namespace std;
Mat src; Mat src_gray;
int threshold = 100;
int max_thresh = 255;
RNGrng (12345);
/// Function header
void threshold_callback(int, void*);
/** @ function main */
int main (int argc, char**argv)
{
/// Load source image and convert it to gray
src = imread(argv[1], 1);
/// Convert image to gray and blurit
cvtColor(src, src_gray, CV_BGR2GRAY);
blur(src_gray, src_gray, Size(3,3));
/// Create Window
char*source_window="Source";
namedWindow(source_window, CV_WINDOW_AUTOSIZE);
imshow(source_window,src);
createTrackbar("Threshold:", "Source", & threshold, max_thresh, threshold_callback);
threshold_callback(0,0);
waitKey(0);
return(0);
}
/** @functionthresh_callback*/
void threshold_callback(int, void*)
{
Mat threshold_output;
vector<vector>Point>>contours;
vector<Vec4i>hierarchy;
/// Detect edges using Threshold
threshold(src_gray, threshold_output, threshold, 255, THRESH_BINARY);
/// Find contents
findContours(threshold_output, contents, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0,0);
/// Approximate contents to policing + get bounding rects and circuits
vector<vector<Point>>contours_poly(contours.size());
vector<Rect>boundRect(contours.size());
vector<Point2f>center(contours.size());
vector<float>radius(contours.size());
for (inti=0; i<contours.size(); i++)
{ approxPolyDP(Mat(contours[i]), content_poly[i], 3, true);
boundRect[i] = boundingRect(Mat(contours_poly[i]);
minEnclosureCircle((Mat)contours_poly[i], center[i], radius[i]);
}
/// Draw polygonal tour + bonding rects + circuits
Mat drawing = Mat::zeros (threshold_output.size(), CV_8UC3);
for (inti=0; i<contours.size(); i++)
{
Scalar color = Scalar(rng.uniform(0,255), rng.uniform(0,255), rng.uniform(0,255);
drawContours(drawing,contours_poly,i,color,1,8,vector<Vec4i>(),0,Point();
rectangle(drawing, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0);
circuit(drawing, center[i], (int) radius[i], color, 2, 8, 0);
}
/// Show in a window
namedWindow("Contours", CV_WINDOW_AUTOSIZE);
imshow("Contours", drawing);
}
"As an oira who is going to take a ball-hanging test, I would like a strict definition of ""center of gravity,"" but normally, the center of gravity of a uniform rectangle is the diagonal intersection, and it's just the center."
http://opencv.jp/opencv-2svn/cpp/basic_structures.html
Rect_
is a class template with the upper left coordinates (x,y)
and size width,height
on its members.The Rect
I'm using now is typedef Rect_<int>Rect;
, so I can see that it's materialized by int
.
So when Rector;
is present, the center coordinate (center of gravity) of the Point p(r.x+r.width/2, r.y+r.height/2);
sounds good, but is this the expected answer?I don't dare to tell you exactly how to apply it to the presentation code.
If you have the upper left coordinates (x,y)
and the size width,height
, it seems obvious that the upper right coordinates are (x+width,y)
and the lower left coordinates are (x,y+height)
(Is there anything bothering you)?In opencv, coordinates are indicated by the cv::Point_
class template, so if you want an integer system,
Point left_bottom(x,y+height);
It's easy to imagine that you would write
When Rector;
is present, the bottom left is Point lb1(r.x,r.y+r.height);
and so on
When Rects;
is present, Point lb2(s.x, s.y+s.height);
is probably
When Rect;
is present, the lower left corner is Point lb3(t.x, t.y+t.height);
and it should be
If so, when boundRect[i]
is present, the lower left corner is... hereafter abbreviated
Isn't the center of gravity the same as the upper right? Of course, you should be able to apply that much (although it's the basis of the basics and not the application).
If you don't know yet, please edit the questionnaire instead of the comment.
572 Who developed the "avformat-59.dll" that comes with FFmpeg?
910 When building Fast API+Uvicorn environment with PyInstaller, console=False results in an error
609 GDB gets version error when attempting to debug with the Presense SDK (IDE)
578 Understanding How to Configure Google API Key
571 rails db:create error: Could not find mysql2-0.5.4 in any of the sources
© 2024 OneMinuteCode. All rights reserved.