一、findfirst函數
findfirst函數是OpenCV中的一個圖像處理函數,用於查找圖像中符合條件的第一個元素的位置。其函數原型為:
cv::Point cv::findFirst(const cv::Mat& haystack, const cv::Mat& needle, cv::Rect roi=Rect(0,0,0,0), const cv::Mat& mask=noArray());
其中,參數意義如下:
- haystack:大圖像,即被查找的圖像。
- needle:小圖像,即要查找的子圖像。
- roi:感興趣區域,即要在haystack中查找的區域,可以為空。
- mask:掩膜,如果被指定,則僅在mask為非零的位置處查找。
返回值是一個cv::Point類型的值,表示找到的第一個符合條件的元素的位置。
下面我們來看一個簡單的示例:
Mat img = imread("image.jpg"); Mat templateImg = imread("template.jpg"); Point matchLoc = findFirst(img, templateImg); cout << "Position of the template in the image: " << matchLoc << endl;
以上示例中,我們在圖像「img」中查找一個子圖像「templateImg」,並返回了該子圖像在圖像「img」中的位置。
二、findroot函數怎麼用
findroot函數用於在給定的連通分量圖中查找根節點。其函數原型為:
int cv::findRoot(int elem, const std::vector& ptr);
其中,參數意義如下:
- elem: 給定的圖像中的像素點的下標。
- ptr: 連通分量的定義數組,即通過連通性定義的像素點集合。
返回值是int類型的值,表示elem所屬的集合的根節點。
下面我們來看一個簡單的示例:
vector ptr = {1, 4, 7, 7, 7, 3, 3, 0, 7}; int root = findRoot(5, ptr); cout << "The root of element 5 is: " << root << endl;
以上示例中,我們定義了一個連通分量ptr,並在其中查找元素5的根節點並返回了該節點。
三、findcontours函數
findcontours函數用於在二值圖像中查找輪廓。其函數原型為:
void cv::findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point());
其中,參數意義如下:
- image: 輸入圖像,必須為二值圖像。
- contours: 輸出變數,包含檢測到的輪廓的數組。
- hierarchy: 輸出變數,包含檢測到的輪廓的層次信息。
- mode: 輪廓檢測模式,可選值為RETR_EXTERNAL、RETR_LIST、RETR_CCOMP、RETR_TREE之一。
- method: 輪廓逼近方法,可選值為CHAIN_APPROX_SIMPLE、CHAIN_APPROX_TC89_L1、CHAIN_APPROX_TC89_KCOS之一。
- offset: 偏移量,在輪廓坐標中加上這個偏移量。
這個函數返回void類型,因為輪廓和層次信息都是通過傳遞參數進行輸出的。下面我們來看一個示例:
Mat srcImg = imread("image.jpg"); Mat grayImg; cvtColor(srcImg, grayImg, COLOR_BGR2GRAY); Mat binaryImg; threshold(grayImg, binaryImg, 0, 255, THRESH_BINARY); vector<vector> contours; vector hierarchy; findContours(binaryImg, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE); drawContours(srcImg, contours, -1, Scalar(0, 0, 255), 2); imshow("Contours", srcImg);
以上示例中,我們首先將彩色圖像轉為灰度圖像,然後進行二值化處理,接著用findcontours函數查找二值圖像中的輪廓,並將輪廓用紅色顯示在原圖像上。
四、find函數
find函數用於查找目標字元串中的子串出現的位置。其函數原型為:
size_t std::find(const string& str, const string& sub_str, size_t pos=0);
其中,參數意義如下:
- str: 目標字元串
- sub_str: 要查找的子字元串
- pos: 字元串開始搜索的位置
這個函數的返回值是size_t類型的值,表示要查找的子字元串在目標字元串中出現的位置。如果查找失敗,則返回string::npos。
下面我們來看一個簡單的示例:
string str = "Hello, World!"; string subStr = "World"; size_t pos = find(str, subStr); cout << "The position of \"" << subStr << "\" in \"" << str << "\" is: " << pos << endl;
以上示例中,我們在字元串「str」中查找子串「subStr」,並返回該子串在字元串「str」中出現的位置。
五、findall函數用法
findall函數用於在目標字元串中查找所有符合條件的子串出現的位置。其函數原型為:
std::vector findAll(const std::string& str, const std::string& sub_str);
其中,參數意義如下:
- str: 目標字元串
- sub_str: 要查找的子字元串
這個函數的返回值是一個vector,包含所有找到的子串的位置。
下面我們來看一個簡單的示例:
string str = "The quick brown fox jumps over the lazy dog"; string subStr = "o"; vector positions = findAll(str, subStr); cout << "The positions of \"" << subStr << "\" in \"" << str << "\" are:\n"; for (const auto& pos : positions) { cout << pos << endl; }
以上示例中,我們在字元串「str」中查找字元「o」的位置,並將所有找到的位置列印出來。
六、findpeaks函數怎麼用
findpeaks函數用於查找數值數組中的峰值。其函數原型為:
std::vector findPeaks(const cv::Mat& src, int minLength=3, int maxWidth=1, double delta=0, int maxNum=INT_MAX);
其中,參數意義如下:
- src: 輸入數組,可以是一維或者多維數組。
- minLength: 峰值的最小長度
- maxWidth: 峰值的最大寬度
- delta: 判斷峰值時的閾值
- maxNum: 最大峰值數量
這個函數的返回值是一個vector,包含所有的峰值的位置。
下面我們來看一個簡單的示例:
Mat src = imread("image.jpg", IMREAD_GRAYSCALE); vector positions = findPeaks(src, 5, 1, 15, 10); for (const auto& pos : positions) { cout << "Peak at position " << pos << endl; }
以上示例中,我們在灰度圖像「src」中查找峰值,列印出所有找到的峰值的位置。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/192029.html