#include <vector>
#include <algorithm>
#include <iostream>
#include <cstdint>
#include <cstdlib>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
static void draw_subdiv( Mat& img, Subdiv2D& subdiv, Scalar delaunay_color )
{
vector<Vec6f> triangleList;
subdiv.getTriangleList(triangleList);
vector<Point> pt(3);
for( size_t i = 0; i < triangleList.size(); i++ )
{
Vec6f t = triangleList[i];
pt[0] = Point(cvRound(t[0]), cvRound(t[1]));
pt[1] = Point(cvRound(t[2]), cvRound(t[3]));
pt[2] = Point(cvRound(t[4]), cvRound(t[5]));
line(img, pt[0], pt[1], delaunay_color, 1, LINE_AA, 0);
line(img, pt[1], pt[2], delaunay_color, 1, LINE_AA, 0);
line(img, pt[2], pt[0], delaunay_color, 1, LINE_AA, 0);
}
}
int main(int argc, char** argv)
{
if (argc < 2)
{
cout << "usage: ./demo input_image" << endl;
return -1;
}
Mat img = imread(argv[1]);
if (img.empty())
{
cout << "error: image is empty" << endl;
}
Mat imgGray, imgBlur, imgEdge;
cvtColor(img, imgGray, CV_BGR2GRAY);
//GaussianBlur(imgGray, imgBlur, Size(3, 3), 0, 0);
blur(imgGray, imgBlur, Size(3, 3));
double threshold = 10.0;
Canny(imgBlur, imgEdge, threshold, threshold * 3, 3);
// imshow("img with edge", imgEdge);
// waitKey(0);
vector<Point2f> supportPoints;
uint32_t imgHeight = img.rows;
uint32_t imgWidth = img.cols;
uint32_t sampleInterval = 3;
for (int row = 0; row < imgHeight; row += sampleInterval)
{
for (int col = 0; col < imgWidth; col += sampleInterval)
{
if (imgEdge.at<uchar>(row, col) == 255)
{
supportPoints.push_back(Point2f(col, row));
}
}
}
Mat imgSupportPoints = img.clone();
for (int i = 0; i < supportPoints.size(); i++)
{
circle( imgSupportPoints, supportPoints[i], 1, Scalar(0, 0, 255), FILLED, LINE_8, 0 );
}
// imshow("img with support points", imgSupportPoints);
// waitKey(0);
Scalar delaunay_color(0,0,255);
Rect rect(0, 0, imgWidth, imgHeight);
Subdiv2D subdiv(rect);
subdiv.insert(supportPoints);
draw_subdiv(img, subdiv, delaunay_color);
imshow("img with Delaunay", img);
waitKey(0);
return 0;
}
[naive] delaunay trianglation
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門相艇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纯陨,你說我怎么就攤上這事坛芽×舸ⅲ” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵咙轩,是天一觀的道長获讳。 經(jīng)常有香客問我,道長活喊,這世上最難降的妖魔是什么丐膝? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮胧弛,結果婚禮上尤误,老公的妹妹穿的比我還像新娘侠畔。我一直安慰自己结缚,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布软棺。 她就那樣靜靜地躺著红竭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喘落。 梳的紋絲不亂的頭發(fā)上茵宪,一...
- 文/蒼蘭香墨 我猛地睜開眼沛慢,長吁一口氣:“原來是場噩夢啊……” “哼赡若!你這毒婦竟也來了?” 一聲冷哼從身側響起团甲,我...
- 正文 年R本政府宣布倔叼,位于F島的核電站,受9級特大地震影響宫莱,放射性物質(zhì)發(fā)生泄漏丈攒。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一授霸、第九天 我趴在偏房一處隱蔽的房頂上張望巡验。 院中可真熱鬧,春花似錦碘耳、人聲如沸显设。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽捕捂。三九已至,卻和暖如春斗搞,著一層夾襖步出監(jiān)牢的瞬間指攒,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- Everybody deserved a love life,"Once naive,once authe...
- -2驶鹉,前言 最近我們公司突然開始涉足react-native開發(fā),老實說铣墨,我內(nèi)心是拒絕的室埋。其一,是因為目前我對于原...
- 1 最近一系列男性明星出軌,朋友圈中爆發(fā)出大量歧視性指責屡律‰绶辏“下半身動物”、“花心”超埋、“段正淳”……以王胖的顏值搏讶,在...
- Everyday, he gets up then have a nice chat with his famil...
- “珞熙媒惕,這是我剛烤的系吩,給你吃《饰担” “珞熙穿挨,這是我特地給你烤的,吃我的肴盏】剖ⅲ” “你們這些都太油膩了,珞熙菜皂,你應該多吃些...