欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

opencv3/C++中如何實現(xiàn)平面對象識別和透視變換方式-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關opencv3/C++中如何實現(xiàn)平面對象識別和透視變換方式的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)公司是專業(yè)的天水網(wǎng)站建設公司,天水接單;提供成都網(wǎng)站制作、成都網(wǎng)站設計、外貿(mào)營銷網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行天水網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

findHomography( )

函數(shù)findHomography( )找到兩個平面之間的透視變換H。

參數(shù)說明:

Mat findHomography( 
InputArray srcPoints, //原始平面中點的坐標
InputArray dstPoints, //目標平面中點的坐標
int method = 0, //用于計算單應性矩陣的方法
double ransacReprojThreshold = 3, 
OutputArray mask=noArray(), //通過魯棒法(RANSAC或LMEDS)設置的可選輸出掩碼
const int maxIters = 2000, //RANSAC迭代的大次數(shù),2000是它可以達到的大值
const double confidence = 0.995 //置信度
);

用于計算單應性矩陣的方法有:

0 :使用所有點的常規(guī)方法;

RANSAC:基于RANSAC的魯棒法;

LMEDS :最小中值魯棒法;

RHO :基于PROSAC的魯棒法;

opencv3/C++中如何實現(xiàn)平面對象識別和透視變換方式

被最小化。如果參數(shù)方法被設置為默認值0,則函數(shù)使用所有的點對以簡單的最小二乘方案計算初始單應性估計。

然而,如果不是所有的點對 opencv3/C++中如何實現(xiàn)平面對象識別和透視變換方式 都符合剛性透視變換(也就是說有一些異常值),那么這個初始估計就會很差。在這種情況下,可以使用三種魯棒法之一。方法RANSAC,LMeDS和RHO嘗試使用這個子集和一個簡單的最小二乘算法來估計單應矩陣的各個隨機子集(每個子集有四對),然后計算計算的單應性的質(zhì)量/良好度(這是RANSAC的內(nèi)點數(shù)或LMeD的中值重投影誤差)。然后使用最佳子集來產(chǎn)生單應矩陣的初始估計和內(nèi)點/外點的掩碼。

不管方法是否魯棒,計算的單應性矩陣都用Levenberg-Marquardt方法進一步細化(僅在魯棒法的情況下使用inlier)以更多地減少再投影誤差。

RANSAC和RHO方法幾乎可以處理任何異常值的比率,但需要一個閾值來區(qū)分異常值和異常值。 LMeDS方法不需要任何閾值,但只有在超過50%的內(nèi)部值時才能正常工作。最后,如果沒有異常值且噪聲相當小,則使用默認方法(method = 0)。

perspectiveTransform()

函數(shù)perspectiveTransform()執(zhí)行矢量的透視矩陣變換。

參數(shù)說明:

void perspectiveTransform(
InputArray src, //輸入雙通道或三通道浮點數(shù)組/圖像
OutputArray dst, //輸出與src相同大小和類型的數(shù)組/圖像
InputArray m //3x3或4x4浮點轉(zhuǎn)換矩陣
);

平面對象識別:

#include<opencv2/opencv.hpp>
#include<opencv2/xfeatures2d.hpp>
using namespace cv;
using namespace cv::xfeatures2d;

int main()
{
 Mat src1,src2;
 src1 = imread("E:/image/image/card.jpg");
 src2 = imread("E:/image/image/cards.jpg");
 if (src1.empty() || src2.empty())
 {
  printf("can ont load images....\n");
  return -1;
 }
 imshow("image1", src1);
 imshow("image2", src2);

 int minHessian = 400;
 //選擇SURF特征
 Ptr<SURF>detector = SURF::create(minHessian);
 std::vector<KeyPoint>keypoints1;
 std::vector<KeyPoint>keypoints2;
 Mat descriptor1, descriptor2;
 //檢測關鍵點并計算描述符
 detector->detectAndCompute(src1, Mat(), keypoints1, descriptor1);
 detector->detectAndCompute(src2, Mat(), keypoints2, descriptor2);

 //基于Flann的描述符匹配器
 FlannBasedMatcher matcher;
 std::vector<DMatch>matches;
 //從查詢集中查找每個描述符的最佳匹配
 matcher.match(descriptor1, descriptor2, matches);
 double minDist = 1000;
 double maxDist = 0;
 for (int i = 0; i < descriptor1.rows; i++)
 {
  double dist = matches[i].distance;
  printf("%f \n", dist);
  if (dist > maxDist)
  {
   maxDist = dist;
  }
  if (dist < minDist)
  {
   minDist = dist;
  }

 }
 //DMatch類用于匹配關鍵點描述符的
 std::vector<DMatch>goodMatches;
 for (int i = 0; i < descriptor1.rows; i++)
 {
  double dist = matches[i].distance;
  if (dist < max(2*minDist, 0.02))
  {
   goodMatches.push_back(matches[i]);
  }
 }
 Mat matchesImg;
 drawMatches(src1, keypoints1, src2, keypoints2, goodMatches, matchesImg, Scalar::all(-1), 
  Scalar::all(-1), std::vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);

 std::vector<Point2f>point1, point2;
 for (int i = 0; i < goodMatches.size(); i++)
 {
  point1.push_back(keypoints1[goodMatches[i].queryIdx].pt);
  point2.push_back(keypoints2[goodMatches[i].trainIdx].pt);
 }

 Mat H = findHomography(point1, point2, RANSAC);
 std::vector<Point2f>cornerPoints1(4);
 std::vector<Point2f>cornerPoints2(4);
 cornerPoints1[0] = Point(0, 0);
 cornerPoints1[1] = Point(src1.cols, 0);
 cornerPoints1[2] = Point(src1.cols, src1.rows);
 cornerPoints1[3] = Point(0,src1.rows);
 perspectiveTransform(cornerPoints1, cornerPoints2, H);

 //繪制出變換后的目標輪廓,由于左側為圖像src2故坐標點整體右移src1.cols
 line(matchesImg, cornerPoints2[0] + Point2f(src1.cols, 0), cornerPoints2[1] + Point2f(src1.cols, 0), Scalar(0,255,255), 4, 8, 0);
 line(matchesImg, cornerPoints2[1] + Point2f(src1.cols, 0), cornerPoints2[2] + Point2f(src1.cols, 0), Scalar(0,255,255), 4, 8, 0);
 line(matchesImg, cornerPoints2[2] + Point2f(src1.cols, 0), cornerPoints2[3] + Point2f(src1.cols, 0), Scalar(0,255,255), 4, 8, 0);
 line(matchesImg, cornerPoints2[3] + Point2f(src1.cols, 0), cornerPoints2[0] + Point2f(src1.cols, 0), Scalar(0,255,255), 4, 8, 0);

 //在原圖上繪制出變換后的目標輪廓
 line(src2, cornerPoints2[0], cornerPoints2[1], Scalar(0,255,255), 4, 8, 0);
 line(src2, cornerPoints2[1], cornerPoints2[2], Scalar(0,255,255), 4, 8, 0);
 line(src2, cornerPoints2[2], cornerPoints2[3], Scalar(0,255,255), 4, 8, 0);
 line(src2, cornerPoints2[3], cornerPoints2[0], Scalar(0,255,255), 4, 8, 0);

 imshow("output", matchesImg);
 imshow("output2", src2);

 waitKey();
 return 0;
}

opencv3/C++中如何實現(xiàn)平面對象識別和透視變換方式

opencv3/C++中如何實現(xiàn)平面對象識別和透視變換方式

opencv3/C++中如何實現(xiàn)平面對象識別和透視變換方式

感謝各位的閱讀!關于“opencv3/C++中如何實現(xiàn)平面對象識別和透視變換方式”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網(wǎng)頁名稱:opencv3/C++中如何實現(xiàn)平面對象識別和透視變換方式-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://aaarwkj.com/article16/ccoggg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、響應式網(wǎng)站、ChatGPT、微信小程序、全網(wǎng)營銷推廣做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設
欧美日韩国产另类一区二区| 国产综合亚洲欧美日韩| 日本中文有码视频在线观看| 91精品国产高清久久福利| 国产午夜草莓视频在线观看| 亚洲激情精品成人在线| 免费在线观看性生活视频| 国产伊人久久综合网| 久久九九精品日本人妻视频| 精品亚洲第一区二区免费在线| 一区二区三区日本在线观看| 男男啪啪猛进猛出无遮挡| 亚洲男人天堂在线观看| 亚洲三级黄片免费播放| 青青草原在线观看网站| 日本免费高清一区二区| 日本熟妇色在线视频不卡| 国产亚洲精品视频热 | 日韩在线观看精品亚洲| 果冻国产精品麻豆成人av| 91香蕉国产在线观看| 色婷婷一区二区三区影片| 国产福利精品一区二区av| 婷婷91麻豆精品国产人妻| 情侣自拍偷拍亚洲天堂区| 成人av免费高清在线| 日本高清有码视频在线观看| 国产精品原创传媒在线观看| 欧美艳星一区二区三区四区| 国产av剧情日韩精品| 亚洲乱色熟女一区二区三区麻豆 | 日本免费熟女一区二区| 91激情黑丝在线观看| 91九色国产在线视频| 翔田千里精品久久一区二| 一区二区三区艳情播放| 国产欧美日韩91成人| 国产老熟女高潮精品视频网站免费 | 高清在线一区二区在线| 国产三级传媒在线观看| 日韩精品国产自拍在线|