日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV Harris 角点检测子

發(fā)布時(shí)間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV Harris 角点检测子 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目標(biāo)

本教程中我們將涉及:

  • 有哪些特征?它們有什么用?
  • 使用函數(shù)?cornerHarris?通過(guò) Harris-Stephens方法檢測(cè)角點(diǎn).

理論

有哪些特征?

在計(jì)算機(jī)視覺(jué)中,我們通常需要尋找兩張圖上的匹配關(guān)鍵點(diǎn)。為什么?因?yàn)橐坏┪覀冎懒藘蓮垐D是相關(guān)聯(lián)的,我們就可以使用 *both?圖像來(lái)提取它們中的信息。

是指

  • 匹配關(guān)鍵點(diǎn)?是指在場(chǎng)景中可以很容易識(shí)別出來(lái)的?特性?. 這些特性就是這里所說(shuō)的?特征?。
  • 因此,特征應(yīng)該有什么樣的特性呢?
    • 應(yīng)該具有?可識(shí)別的獨(dú)一無(wú)二性

圖像特征類(lèi)型

圖像特征類(lèi)型:

  • 邊緣
  • 角點(diǎn)?(感興趣關(guān)鍵點(diǎn))
  • 斑點(diǎn)(Blobs) (感興趣區(qū)域)

本教程涉及?角點(diǎn)?特征。

為什么角點(diǎn)是特殊的?

  • 因?yàn)榻屈c(diǎn)是兩個(gè)邊緣的連接點(diǎn),它代表了兩個(gè)邊緣變化的方向上的點(diǎn)。圖像梯度有很高的變化。這種變化是可以用來(lái)幫助檢測(cè)角點(diǎn)的。

如何工作?

  • 由于角點(diǎn)代表了圖像像素梯度變化,我們將尋找這個(gè)”變化”。

  • 考慮到一個(gè)灰度圖像?. 劃動(dòng)窗口??(with displacements??在x方向和??方向)??計(jì)算像素灰度變化。

    其中:

    • ?is the window at position?
    • ?is the intensity at?
    • ?is the intensity at the moved window?
  • 為了尋找?guī)Ы屈c(diǎn)的窗口,我們搜索像素灰度變化較大的窗口。于是, 我們期望最大化以下式子:

  • 使用?泰勒(Taylor)展開(kāi)式:

  • 式子可以展開(kāi)為:

  • 一個(gè)舉證表達(dá)式可以寫(xiě)為:

  • 表示為:

  • 因此我們有等式:

  • 每個(gè)窗口中計(jì)算得到一個(gè)值。這個(gè)值決定了這個(gè)窗口中是否包含了角點(diǎn):

    其中:

    • det(M) =?
    • trace(M) =?

    一個(gè)窗口,它的分?jǐn)?shù)??大于一個(gè)特定值,這個(gè)窗口就可以被認(rèn)為是”角點(diǎn)”

代碼

這個(gè)教程的代碼如下所示。還可以通過(guò)?這個(gè)鏈接下載到源代碼

#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <stdio.h> #include <stdlib.h>using namespace cv; using namespace std;/// Global variables Mat src, src_gray; int thresh = 200; int max_thresh = 255;char* source_window = "Source image"; char* corners_window = "Corners detected";/// Function header void cornerHarris_demo( int, void* );/** @function main */ int main( int argc, char** argv ) {/// Load source image and convert it to graysrc = imread( argv[1], 1 );cvtColor( src, src_gray, CV_BGR2GRAY );/// Create a window and a trackbarnamedWindow( source_window, CV_WINDOW_AUTOSIZE );createTrackbar( "Threshold: ", source_window, &thresh, max_thresh, cornerHarris_demo );imshow( source_window, src );cornerHarris_demo( 0, 0 );waitKey(0);return(0); }/** @function cornerHarris_demo */ void cornerHarris_demo( int, void* ) {Mat dst, dst_norm, dst_norm_scaled;dst = Mat::zeros( src.size(), CV_32FC1 );/// Detector parametersint blockSize = 2;int apertureSize = 3;double k = 0.04;/// Detecting cornerscornerHarris( src_gray, dst, blockSize, apertureSize, k, BORDER_DEFAULT );/// Normalizingnormalize( dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat() );convertScaleAbs( dst_norm, dst_norm_scaled );/// Drawing a circle around cornersfor( int j = 0; j < dst_norm.rows ; j++ ){ for( int i = 0; i < dst_norm.cols; i++ ){if( (int) dst_norm.at<float>(j,i) > thresh ){circle( dst_norm_scaled, Point( i, j ), 5, Scalar(0), 2, 8, 0 );}}}/// Showing the resultnamedWindow( corners_window, CV_WINDOW_AUTOSIZE );imshow( corners_window, dst_norm_scaled ); }

解釋

實(shí)驗(yàn)結(jié)果

原始圖像:

檢測(cè)到的角點(diǎn)被黑色圈標(biāo)記了

翻譯者

Shuai Zheng, <kylezheng04@gmail.com>,?http://www.cbsr.ia.ac.cn/users/szheng/


from:?http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/features2d/trackingmotion/harris_detector/harris_detector.html#harris-detector

總結(jié)

以上是生活随笔為你收集整理的OpenCV Harris 角点检测子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。