① opencv里的模板匹配,用的是cvMatchShapes函數。但是怎麼知道模板和圖片的匹配值是多少
這個函數不是有一個double型返回值么。。那就是啊。
② opencv的模板匹配如何計算置信度
Opencv模板匹配函數裡麵包含了匹配的置信度:
img_rgb = cv2.imread('mario.jpg')。
img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2GRAY)。
template = cv2.imread('mario_coin.jpg', 0)。
h, w =template.shape[:2]。
# res裡麵包含的是匹配的置信度。
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)。
threshold = 0.8。
# 取匹配程度大於0.8的坐標。
loc = np.where(res >= threshold)。
OpenCV是一個基於Apache2.0許可(開源)發行的跨平台計算機視覺和機器學習軟體庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。
它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的介面,實現了圖像處理和計算機視覺方面的很多通用演算法。
OpenCV用C++語言編寫,它具有C ++,Python,Java和MATLAB介面,並支持Windows,Linux,Android和Mac OS,OpenCV主要傾向於實時視覺應用,並在可用時利用MMX和SSE指令, 如今也提供對於C#、Ch、Ruby,GO的支持。
③ opencv 中自帶的模板匹配演算法出處
方法如下:
使用OPENCV下SIFT庫做圖像匹配的常式
// opencv_empty_proj.cpp : 定義控制台應用程序的入口點。
//
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/features2d/features2d.hpp>
#include<opencv2/nonfree/nonfree.hpp>
#include<opencv2/legacy/legacy.hpp>
#include<vector>
using namespace std;
using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
const char* imagename = "img.jpg";
//從文件中讀入圖像
Mat img = imread(imagename);
Mat img2=imread("img2.jpg");
//如果讀入圖像失敗
if(img.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
if(img2.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
//顯示圖像
imshow("image before", img);
imshow("image2 before",img2);
//sift特徵檢測
SiftFeatureDetector siftdtc;
vector<KeyPoint>kp1,kp2;
siftdtc.detect(img,kp1);
Mat outimg1;
drawKeypoints(img,kp1,outimg1);
imshow("image1 keypoints",outimg1);
KeyPoint kp;
vector<KeyPoint>::iterator itvc;
for(itvc=kp1.begin();itvc!=kp1.end();itvc++)
{
cout<<"angle:"<<itvc->angle<<"\t"<<itvc->class_id<<"\t"<<itvc->octave<<"\t"<<itvc->pt<<"\t"<<itvc->response<<endl;
}
siftdtc.detect(img2,kp2);
Mat outimg2;
drawKeypoints(img2,kp2,outimg2);
imshow("image2 keypoints",outimg2);
SiftDescriptorExtractor extractor;
Mat descriptor1,descriptor2;
BruteForceMatcher<L2<float>> matcher;
vector<DMatch> matches;
Mat img_matches;
extractor.compute(img,kp1,descriptor1);
extractor.compute(img2,kp2,descriptor2);
imshow("desc",descriptor1);
cout<<endl<<descriptor1<<endl;
matcher.match(descriptor1,descriptor2,matches);
drawMatches(img,kp1,img2,kp2,matches,img_matches);
imshow("matches",img_matches);
//此函數等待按鍵,按鍵盤任意鍵就返回
waitKey();
return 0;
}
④ 使用OpenCV進行模板匹配(原圖-模板圖)
匹配演算法有很多,比如最簡單的對比原圖和模板圖的像素值。
但是這種方法稍微有一點旋轉和光照變化結果就會很差。
為了改進這個,有了SAD演算法。
然後SAD相似的SSD。
再然後是計算區域互相關性的NCC演算法。
以上三種演算法中,SAD演算法最簡單,因此當模板大小確定後,SAD演算法的速度最快。NCC演算法與SAD演算法相比要復雜得多。
至於演算法的過程,這三個演算法都是很好理解的演算法,我覺得還是自學比較好。
⑤ opencv模板匹配可以循環多個原圖匹配模板嗎
先實現單個,再循環多個呀。單個的你會嗎,代碼貼一下。
⑥ 如何使用opencv實現圖像匹配
OpenCV中有一些已經實現的匹配庫。一般是先尋找特徵點,然後匹配特徵點。
尋找特徵點一般有Harris(opencv中函數:cornerHarris),FAST(opencv中函數:FastFeatureDetector)等,匹配主要有SURF,SIFT等。可查閱OpenCV使用手冊學習調用,同時Opencv也有一些例子,可參考一下。
⑦ opencv 中自帶的模板匹配演算法,不能顯示結果。
1-18.jpg
文件名有沒有問題? 。通常最好不要用含有中文和這些特殊符號的文件名吧,先改一下試試
而且,上面提示說是一個斷言錯誤發生了。
觸發這個斷言的原因是() 里的那個條件不滿足,因此斷言錯誤,斷言在debug版本中才有效,要不你試試編譯release版本吧。
⑧ opencv程序運行結果(有圖片和坐標信息)如何保存在Mysql中
將得到的圖片讀取成byte[]數組,然後和一半的數據存取一樣,存到資料庫的image或者blob欄位中!!但是使用sql語句的時候需要用@參數 來存哈,不能用+來拼接字元串!就這樣!