婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > OpenCV繪制圓端矩形的示例代碼

OpenCV繪制圓端矩形的示例代碼

熱門標簽:湛江智能外呼系統廠家 地圖標注審核表 ai電話機器人哪里好 百度地圖標注沒有了 宿遷星美防封電銷卡 外呼并發線路 西藏房產智能外呼系統要多少錢 ai電銷機器人源碼 長沙高頻外呼系統原理是什么

本文主要介紹了OpenCV繪制圓端矩形的示例代碼,分享給大家,具體如下:

功能函數

// 繪制圓端矩形(藥丸狀,pill)
void DrawPill(cv::Mat mask, const cv::RotatedRect rotatedrect, const cv::Scalar color, int thickness, int lineType)
{
	cv::Mat canvas = cv::Mat::zeros(mask.size(), CV_8UC1);
	// 確定短邊,短邊繪制圓形
	cv::RotatedRect rect = rotatedrect;
	float r = rect.size.height / 2.0f;
	if (rect.size.width > rect.size.height) {
		rect.size.width -= rect.size.height;
	}
	else {
		rect.size.height -= rect.size.width;
		r = rect.size.width / 2.0f;
	}
	cv::Point2f ps[4];
	rect.points(ps);
 
	// 繪制邊緣
	std::vectorstd::vectorcv::Point>> tmpContours;
	std::vectorcv::Point> contours;
	for (int i = 0; i != 4; ++i) {
		contours.emplace_back(cv::Point2i(ps[i]));
	}
	tmpContours.insert(tmpContours.end(), contours);
	drawContours(canvas, tmpContours, 0, cv::Scalar(255),5, lineType);  // 填充mask
 
	// 計算常長短軸
	float a = rotatedrect.size.width;
	float b = rotatedrect.size.height;
 
	int point01_x = (int)((ps[0].x + ps[1].x) / 2.0f);
	int point01_y = (int)((ps[0].y + ps[1].y) / 2.0f);
	int point03_x = (int)((ps[0].x + ps[3].x) / 2.0f);
	int point03_y = (int)((ps[0].y + ps[3].y) / 2.0f);
	int point12_x = (int)((ps[1].x + ps[2].x) / 2.0f);
	int point12_y = (int)((ps[1].y + ps[2].y) / 2.0f);
	int point23_x = (int)((ps[2].x + ps[3].x) / 2.0f);
	int point23_y = (int)((ps[2].y + ps[3].y) / 2.0f);
 
	cv::Point c0 = a  b ? cv::Point(point12_x, point12_y) : cv::Point(point23_x, point23_y);
	cv::Point c1 = a  b ? cv::Point(point03_x, point03_y) : cv::Point(point01_x, point01_y);
 
	// 長軸兩端以填充的方式畫圓,直徑等于短軸
	cv::circle(canvas, c0, (int)r, cv::Scalar(255), 5, lineType);
	cv::circle(canvas, c1, (int)r, cv::Scalar(255), 5, lineType);
 
	// 繪制外圍輪廓,如果不這樣操作,會得到一個矩形加兩個圓形,丑。。。
	std::vectorstd::vectorcv::Point>> EXcontours;
	cv::findContours(canvas,EXcontours,cv::RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
	drawContours(mask, EXcontours, 0, color, thickness,lineType);  // 填充mask
}

測試代碼

#include iostream>
#include opencv2/opencv.hpp>
 
using namespace std;
using namespace cv;
 
void DrawPill(cv::Mat mask, const cv::RotatedRect rotatedrect, const cv::Scalar color, int thickness, int lineType);
 
int main()
{
	cv::Mat src = imread("test.jpg");
	cv::Mat result = src.clone();
	cv::RotatedRect rorect(cv::Point(src.cols / 2, src.rows / 2), cv::Size(1000, 800), 50);
	DrawPill(result, rorect, cv::Scalar(0, 255, 255),8,16);
	imshow("original", src);
	imshow("result", result);
	waitKey(0);
	return 0;
}
 
// 繪制圓端矩形(藥丸狀,pill)
void DrawPill(cv::Mat mask, const cv::RotatedRect rotatedrect, const cv::Scalar color, int thickness, int lineType)
{
	cv::Mat canvas = cv::Mat::zeros(mask.size(), CV_8UC1);
	// 確定短邊,短邊繪制圓形
	cv::RotatedRect rect = rotatedrect;
	float r = rect.size.height / 2.0f;
	if (rect.size.width > rect.size.height) {
		rect.size.width -= rect.size.height;
	}
	else {
		rect.size.height -= rect.size.width;
		r = rect.size.width / 2.0f;
	}
	cv::Point2f ps[4];
	rect.points(ps);
 
	// 繪制邊緣
	std::vectorstd::vectorcv::Point>> tmpContours;
	std::vectorcv::Point> contours;
	for (int i = 0; i != 4; ++i) {
		contours.emplace_back(cv::Point2i(ps[i]));
	}
	tmpContours.insert(tmpContours.end(), contours);
	drawContours(canvas, tmpContours, 0, cv::Scalar(255),5, lineType);  // 填充mask
 
	// 計算常長短軸
	float a = rotatedrect.size.width;
	float b = rotatedrect.size.height;
 
	int point01_x = (int)((ps[0].x + ps[1].x) / 2.0f);
	int point01_y = (int)((ps[0].y + ps[1].y) / 2.0f);
	int point03_x = (int)((ps[0].x + ps[3].x) / 2.0f);
	int point03_y = (int)((ps[0].y + ps[3].y) / 2.0f);
	int point12_x = (int)((ps[1].x + ps[2].x) / 2.0f);
	int point12_y = (int)((ps[1].y + ps[2].y) / 2.0f);
	int point23_x = (int)((ps[2].x + ps[3].x) / 2.0f);
	int point23_y = (int)((ps[2].y + ps[3].y) / 2.0f);
 
	cv::Point c0 = a  b ? cv::Point(point12_x, point12_y) : cv::Point(point23_x, point23_y);
	cv::Point c1 = a  b ? cv::Point(point03_x, point03_y) : cv::Point(point01_x, point01_y);
 
	// 長軸兩端以填充的方式畫圓,直徑等于短軸
	cv::circle(canvas, c0, (int)r, cv::Scalar(255), 5, lineType);
	cv::circle(canvas, c1, (int)r, cv::Scalar(255), 5, lineType);
 
	// 繪制外圍輪廓,如果不這樣操作,會得到一個矩形加兩個圓形,丑。。。
	std::vectorstd::vectorcv::Point>> EXcontours;
	cv::findContours(canvas,EXcontours,cv::RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
	drawContours(mask, EXcontours, 0, color, thickness,lineType);  // 填充mask
}

測試效果

 

圖1 原圖

 

圖2 繪制圓端矩形

繪制圓端矩形其實就是繪制了一個旋轉矩形,然后分析哪個軸更長,就在哪個軸上的兩端畫圓,再取外圍輪廓,大功告成,通俗來講就畫了一個矩形兩個圓,如圖3所示。

 

圖3 繪制邏輯

不過注意,這個圖形最好不要超過圖像邊界,因為超過后再分析外圍輪廓,它認為的外圍就到了內部,如圖4所示。

 

圖4 外圍線

然后,你就會得到一個奇葩圖形,如圖5所示。

圖5 示意圖

到此這篇關于OpenCV繪制圓端矩形的示例代碼的文章就介紹到這了,更多相關OpenCV 圓端矩形內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python opencv minAreaRect 生成最小外接矩形的方法
  • 詳解利用OpenCV提取圖像中的矩形區域(PPT屏幕等)
  • python opencv實現圖片旋轉矩形分割
  • python opencv實現旋轉矩形框裁減功能
  • OpenCV 圓與矩形識別的方法
  • opencv提取外部輪廓并在外部加矩形框
  • python3+openCV 獲取圖片中文本區域的最小外接矩形實例
  • Opencv繪制最小外接矩形、最小外接圓
  • openCV提取圖像中的矩形區域

標簽:普洱 海南 南平 林芝 漯河 盤錦 大同 寧夏

巨人網絡通訊聲明:本文標題《OpenCV繪制圓端矩形的示例代碼》,本文關鍵詞  OpenCV,繪制,圓端,矩,形的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《OpenCV繪制圓端矩形的示例代碼》相關的同類信息!
  • 本頁收集關于OpenCV繪制圓端矩形的示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲精品乱码久久久久久久久 | 欧美一级专区免费大片| 欧美在线影院一区二区| 99视频精品全部免费在线| 成人久久视频在线观看| 91亚洲永久精品| 制服视频三区第一页精品| 日韩精品综合一本久道在线视频| 日韩精品影音先锋| 久久久精品黄色| 亚洲一区二区在线免费观看视频| 丝袜美腿亚洲色图| 成人国产精品免费网站| 欧美日韩一区二区三区视频 | 麻豆成人久久精品二区三区红 | 亚洲一区二区三区爽爽爽爽爽| 久久99热99| 欧美一区二区在线免费观看| 国产日韩v精品一区二区| 亚洲二区在线观看| 99re热这里只有精品免费视频| 欧美精品一区二区久久久| 亚洲日本在线观看| 成人a免费在线看| 国产亚洲精品福利| 成人精品高清在线| 亚洲人成人一区二区在线观看| 国产在线精品免费av| 91精品免费观看| 蜜桃久久久久久久| 欧美视频一区二| 一区二区高清视频在线观看| 成人综合婷婷国产精品久久免费| 精品国产免费一区二区三区四区 | 亚洲婷婷在线视频| 成人综合婷婷国产精品久久蜜臀| 日韩视频免费直播| 黄一区二区三区| 国产精品色眯眯| 欧美视频三区在线播放| 亚洲成人精品一区二区| 欧美日韩一二三| 国产在线精品一区二区| 亚洲欧洲日韩在线| 在线观看日韩精品| 韩国v欧美v亚洲v日本v| 亚洲国产精品99久久久久久久久 | 欧美高清在线精品一区| 91老师国产黑色丝袜在线| 亚洲一区在线视频观看| www日韩大片| 在线观看一区二区精品视频| 日本三级韩国三级欧美三级| 国产欧美精品一区aⅴ影院| 99久久精品免费看国产| 免费成人美女在线观看.| 国产日韩欧美高清| 欧美va亚洲va| 精品剧情v国产在线观看在线| 日本精品裸体写真集在线观看| 狠狠色狠狠色合久久伊人| 亚洲精品日韩专区silk| 中文字幕国产一区二区| 久久日韩精品一区二区五区| 欧美日韩一本到| 欧美私人免费视频| 91丨九色丨国产丨porny| 成人h精品动漫一区二区三区| 国产在线精品一区二区| 国产成人夜色高潮福利影视| 精品一区二区三区在线观看国产| 午夜精品久久久久久久| 久久黄色级2电影| 国产专区综合网| 国产精品一色哟哟哟| 不卡欧美aaaaa| 久久女同精品一区二区| 中文字幕乱码亚洲精品一区| 中文字幕在线一区| 午夜影院久久久| 精久久久久久久久久久| 成人免费看黄yyy456| 欧美日韩精品免费观看视频 | 裸体一区二区三区| 成人一区二区三区中文字幕| 91在线观看美女| 精品毛片乱码1区2区3区 | 韩国av一区二区| 欧美图片一区二区三区| 久久只精品国产| 亚洲在线视频免费观看| 国产精品一区二区久久精品爱涩| 99精品视频一区二区三区| 日韩一区二区三区免费观看| 亚洲精品成人在线| av在线不卡网| 久久久久国产免费免费| 午夜伦欧美伦电影理论片| av爱爱亚洲一区| 中文字幕国产一区| 国产电影一区二区三区| 久久综合资源网| 看片网站欧美日韩| 日韩精品最新网址| 日本欧美一区二区三区| 欧美午夜电影网| 视频一区欧美精品| 欧美成人精品1314www| 久久精品国产77777蜜臀| 日韩欧美精品在线视频| 蜜桃视频一区二区三区在线观看| 欧美日韩一级片网站| 麻豆成人久久精品二区三区小说| 日韩亚洲国产中文字幕欧美| 另类综合日韩欧美亚洲| ww久久中文字幕| 色综合久久中文字幕| 亚洲国产成人高清精品| 精品国产一区a| 成人综合婷婷国产精品久久免费| 中文字幕精品综合| 欧美一卡2卡3卡4卡| 99久久免费国产| 日本三级亚洲精品| 亚洲欧美aⅴ...| 欧美一区二区观看视频| 99久久精品免费看国产| 日韩精品一级中文字幕精品视频免费观看 | 亚洲色图一区二区三区| 日韩一二在线观看| 成人精品gif动图一区| 久久精品二区亚洲w码| 一区二区成人在线视频 | 国产精品免费视频观看| 欧美精品一区二区在线播放| 欧美性大战久久| 91久久一区二区| 色哟哟日韩精品| 波多野结衣在线一区| 国产乱码一区二区三区| 免费成人你懂的| 极品尤物av久久免费看| 免费三级欧美电影| 日本中文在线一区| 日韩电影在线一区二区三区| 亚洲一区二区五区| 丝袜诱惑制服诱惑色一区在线观看 | 99re热这里只有精品视频| gogo大胆日本视频一区| jizzjizzjizz欧美| 欧美三级在线播放| 精品欧美一区二区久久| 日韩免费一区二区| 久久综合色婷婷| 亚洲四区在线观看| 午夜精品免费在线| 国产美女主播视频一区| 成人av午夜影院| 欧美亚洲一区二区在线| 日韩精品一区二区三区中文精品| 精品久久久久久最新网址| 久久久久久电影| 亚洲成人一区二区| 成人小视频在线| 777欧美精品| 亚洲日本电影在线| 久久精品国产精品亚洲综合| 久久国产精品露脸对白| 色婷婷香蕉在线一区二区| 国产亚洲精品精华液| 日本欧美肥老太交大片| 91久久国产最好的精华液| 国产亚洲人成网站| 国内精品久久久久影院色| 精品1区2区3区| 中文字幕一区二区三区精华液 | 成人激情校园春色| 国产亚洲女人久久久久毛片| 日本sm残虐另类| 精品粉嫩超白一线天av| 精品一区二区在线观看| 欧美一区日韩一区| 日本色综合中文字幕| 亚洲精品一区二区三区香蕉| 紧缚奴在线一区二区三区| 欧美一区二区三区系列电影| 日韩午夜小视频| 中文字幕 久热精品 视频在线| 成人动漫一区二区| 精品在线播放免费| 久88久久88久久久| 免费久久99精品国产| 亚洲日本在线天堂| 91精品国产综合久久福利软件| 美女视频一区在线观看| 中文字幕在线不卡一区| 欧美一区二区三区在线看| 床上的激情91.| 国产一区欧美日韩| 亚洲va韩国va欧美va|