A 演算法的c 實現 opencv動態顯示

2021-08-20 06:17:14 字數 2450 閱讀 5552

先看一下效果圖吧:藍色的是找到的路徑,其它顏色的找路徑過程中遍歷的點。

這裡貼出**,關鍵的地方都有注釋。

#pragma once

#include

#include

using

namespace

std;

using

namespace cv;

struct note

//變數初始化

};class astar

;

#include

#include"astar.h"

#include

using

namespace

std;

void astar::initastar(vector

> &_map)

}bool astar::isinlist(const

vector

&list, const note *note) const

bool astar::isreachable(const note *currentnote, const note *targetnote) const

vector

astar::getsurroundnotes(const note *currentnote) const

note *astar::getleastfnote()

return null;

}int astar::calcg( note *note)

int astar::calch(note *note, note *end)

int astar::calcf(note *note)

void astar::deletenote(vector

&list, note *note)

list.erase(list.begin()+pos);

}note *astar::findpath(note &startnote, note &endnote)

//對某乙個格仔,它在開啟列表中,計算g值, 如果比原來的大, 就什麼都不做, 否則設定它的父節點為當前點,並更新g和f

else

}//如果終點出現在開集中,表明找到了路徑,並返回。

if (isinlist(openlist, &endnote))

return target; //返回列表裡的節點指標

}img.at(currentnote->x, currentnote->y) = vec3b(0,255, 0);

resize(img, resize_img, size(675, 675), 0, 0, 3);

writer << resize_img;

imshow("find path", resize_img);

waitkey(20);

}return null;

}vector

astar::getpath(note &starnote, note &endnote)

writer.release();

return path;

}

#include

#include"astar.h"

using

namespace

std;

int main()

, ,,,

,,,,

,,,,

,,,,

,,,,

,,,,

,,};astar astar;

astar.initastar(map);

//設定起始和結束點

note start(26, 0);

note end(0, 26);

//a*演算法找尋路徑

vector

path = astar.getpath(start, end );

//列印路徑

cout

<< "路徑座標點:"

<< endl;

if (path.empty())

cout

<< "兩點之間不存在路徑"

<< endl;

else

cout

<< endl;

}//列印路徑圖

cout

<

<< endl;

for (auto i = 0; i != map.size(); i++) //列印地圖

cout

<< endl;

}system("pause");

destroyallwindows();

return

0;}

OTSU演算法介紹及openCV的C 實現

otsu演算法也稱最大類間差法,有時也稱之為大津演算法。前景與背景影象的類間方差最大。因方差是灰度分布均勻性的一種度量,背景和前景之間的類間方差越大,說明構成影象的兩部分的差別越大,當部分前景錯分為背景或部分背景錯分為前景都會導致兩部分差別變小。因此,使類間方差最大的分割意味著錯分概率最小。ostu...

CamShift演算法,OpenCV實現

這裡來到了camshift演算法,opencv實現的第二部分,這一次重點討論mean shift演算法。在討論mean shift演算法之前,首先討論在2d概率分布影象中,如何計算某個區域的重心 mass center 的問題,重心可以通過以下公式來計算 1.計算區域內0階矩 for int i 0...

OpenCV實現KNN演算法

原文 opencv實現knn演算法 這個演算法首先貯藏所有的訓練樣本,然後通過分析 包括選舉,計算加權和等方式 乙個新樣本周圍k個最近鄰以給出該樣本的相應值。這種方法有時候被稱作 基於樣本的學習 即為了 我們對於給定的輸入搜尋最近的已知其相應的特徵向量。class cvknearest public...