我之前发布了有关同一程序的问题,但未收到任何答案.我已经纠正了我在那时遇到的问题,只是面对一个新问题.
基本上我使用未经校准的方法自动校正立体图像对以进行旋转和平移.我使用诸如SURF之类的特征检测算法来找到两个图像中的点,左右立体图像对,然后再次使用SURF我匹配两个图像之间的点.然后,我需要使用这些匹配点来找到可用于校正图像的基本矩阵.
我的问题是这个.我的匹配点存储在描述符匹配的单个向量中,然后针对异常值进行过滤.findFundamentalMat将两个独立的匹配点数组作为输入.我不知道如何从我的矢量转换为我的两个独立的数组.
cout << "< Matching descriptors..." << endl;
vector<DMatch> filteredMatches;
crossCheckMatching( descriptorMatcher, descriptors1, descriptors2, filteredMatches, 1 );
cout << filteredMatches.size() << " matches" << endl << ">" << endl;
Run Code Online (Sandbox Code Playgroud)
矢量已创建.
void crossCheckMatching( Ptr<DescriptorMatcher>& descriptorMatcher,
const Mat& descriptors1, const Mat& descriptors2,
vector<DMatch>& filteredMatches12, int knn=1 )
{
filteredMatches12.clear();
vector<vector<DMatch> > matches12, matches21;
descriptorMatcher->knnMatch( descriptors1, descriptors2, matches12, knn );
descriptorMatcher->knnMatch( descriptors2, descriptors1, matches21, knn );
for( size_t m = 0; m < matches12.size(); m++ )
{
bool findCrossCheck = false; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用OpenCV来拍摄立体图像对...即同一主体的左图像和右图像...然后在不知道相机的任何属性的情况下校正它们以进行旋转和平移.一旦图像被纠正,我应该能够将它们显示给用户.
到目前为止,我已经合并了两个来自OpenCV示例目录的演示程序,目前非常糟糕......我将清理代码并在我开始工作时更好地安排它...它似乎正在工作,但是当我尝试显示程序因调试错误而崩溃的结果.在命令窗口中,它显示文件中的未知函数中的"OpenCV错误:断言失败(scn == 1 &&(dcn == 3 || dcn == 4))........\opencv\modules\imgproc\src\color.cpp,第2453行"
注释掉代码的各个部分以显示结果只会导致不同的OpenCV错误.这是我的代码.如果有人能帮忙,我会永远爱你.
#include "stdafx.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/features2d/features2d.hpp"
#include <iostream>
using namespace cv;
using namespace std;
void help(char** argv)
{
cout << "\nThis program demonstrates keypoint finding and matching between 2 images using features2d framework.\n"
<< "Example of usage:\n"
<< argv[0] << " [detectorType] [descriptorType] [image1] [image2] [ransacReprojThreshold]\n"
<< "\n"
<< "Matches are filtered using homography matrix if ransacReprojThreshold>=0\n"
<< "Example:\n"
<< "./descriptor_extractor_matcher SURF SURF cola1.jpg …Run Code Online (Sandbox Code Playgroud) 我有一个TYPE_BYTE_GRAY的BufferedImage,我需要得到x,y的像素值.我知道我不能使用getRGB,因为它返回错误的颜色模型,所以我该怎么办呢?非常感谢!
所以我给了一个"相似性度量"来使用但没有信息.相似性度量称为欧氏距离平方,或平方距离的总和,我有这一个公式:
D2 = ?(I(x,y) – I’(x,y))^2
Run Code Online (Sandbox Code Playgroud)
维基百科告诉我这个:
d(p,q) = (p1 ? q1)^2 + (p2 ? q2)^2 + ... + (pi ? qi)^2 + ... + (pn ? qn)^2
Run Code Online (Sandbox Code Playgroud)
我有一个立体图像对,即同一主题的两个图像,一个来自左眼视图,一个来自右眼视图.我可以从左右图片中的相应坐标中提取像素信息:
private double euclidDistSquared(BufferedImage leftRegion, BufferedImage rightRegion) {
double temp = 0;
double ssd = 0;
Raster left = leftRegion.getData();
Raster right = rightRegion.getData();
for(int x = 0; x < leftRegion.getWidth(); x++) {
for(int y = 0; y < leftRegion.getHeight(); y++) {
temp = left.getSampleDouble(x,y,0) - right.getSampleDouble(x,y,0);
temp *= temp;
ssd += …Run Code Online (Sandbox Code Playgroud)