點我有一些OpenCV的代碼中的小bug,嘗試做如下:麻煩與OpenCV的
針2個的攝像頭圖像一起實時。
執行背景減法並從所得到的前景Mat計算典型的輪廓矢量。
從輪廓矢量中計算出表示物體在圖像中的位置的點。它可能只是質心,但我在所有邊界框的底部邊緣上使用中心點。這在「最低點」功能中完成。
轉移這些點到一個新的座標系,這大致接近,只是範圍縮小或到新的圖像大小,但在未來它可能是任何東西。這在「tf」功能中完成。
我可以從測試中看出結果#1-3的工作正常。出於某種原因,#4無法正常工作。新計算的座標始終有一個零x分量,並且y分量根本不會縮放。當我繪製它們或繪製座標時,它始終爲零,並始終繪製在新圖像的左側。相關的代碼如下:
//from transfunc.cpp
#include <opencv2/opencv.hpp>
#include <vector>
#include "defines.h"
#include "protos.h"
vector<Point> lowestPoints(vector<vector<Point>> contours)
{
// Returns the midpoints of the bottom edge of contour bounding boxes
Point p;
Rect box;
vector<Point> lowPoints;
for (unsigned int i = 0; i < contours.size(); i++)
{
box = boundingRect(contours[i]);
p.x = box.x + box.width/2;
p.y = box.y + box.height;
lowPoints.push_back(p);
}
return lowPoints;
}
vector<Point> tf(vector<Point> in, vector<Point> grid, Mat camImg, Mat layoutImg)
{
int a, b;
Point temp;
vector<Point> out;
std::cout << "Points set in to TF..." << std::endl << std::endl;
printPoints(in);
a = layoutImg.cols/camImg.cols;
b = layoutImg.rows/camImg.rows;
for (unsigned int i = 0; i < in.size(); i++)
{
temp.x = in[i].x * a;
temp.y = in[i].y * b;
out.push_back(temp);
}
std::cout << "Points calculated in TF..." << std::endl << std::endl;
printPoints(out);
return out;
}
// from main.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include "defines.h"
#include "protos.h"
int main()
{
//variable declarations and initializations
while(true) //main webcam feed loop
{
// First time through calculate necessary camera parameters for stitching
// Grab frames from videoCaptures
// Stitch the frames together (stored in Mat pano)
// Background subtraction + calculate vector<vector<Point>> contours
if (contours.size() > 0)
{
drawBoundingBoxes(contours, pano);
lowPoints = lowestPoints(contours);
objPoints = tf(lowPoint, pano, topDown);
// Draw everything
std::cout << "Printing 'Lowest' Points in main..." << std::endl;
printPoints(lowestPoints(contours));
std::cout << "Printing 'Object' Points in main..." << std::endl;
printPoints(objPoints);
}
// Show images
}
return 0;
}
用於採樣點的輸出如下所示:在到TF發送
點...
點0:(509,340) 點1 :(477,261)
熱點在TF計算...
點0:(0,340) 點1:(0,261)
打印 '最低' 個主...
點0:(509,340) 第1點:(477,261)在主
打印爲 'Object' 點...
點0:(0,340) 點1:(0,261)
爲什麼x座標總是0,爲什麼是Y座標不被用b縮放?
感謝,
託尼
你確定你的乘數'a'是否爲非零?如果你在'tf'函數內打印出'a'和'b'的值,它們會顯示什麼? – aardvarkk