最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV繪制圓角矩形的方法實(shí)例

 更新時(shí)間:2021年08月31日 10:47:01   作者:翟天保Steven  
我們?cè)谳喞厝〕鰜頃r(shí)一般需要是矩形的圖像,所以下面這篇文章主要給大家介紹了關(guān)于OpenCV繪制圓角矩形的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

功能函數(shù)

// 繪制圓角矩形
void DrawRotatedRectChamfer(cv::Mat mask,const cv::RotatedRect rotatedrect, float radius,const cv::Scalar &color, int thickness, int lineType)
{
	// 創(chuàng)建畫布
	cv::Mat canvas = cv::Mat::zeros(mask.size(), CV_8UC1);
 
	cv::RotatedRect newrotatedrect = rotatedrect;
 
	//畫寬縮減后的矩形
	cv::RotatedRect r1 = newrotatedrect;
	r1.size.width = r1.size.width - 2 * radius;
	DrawRotatedRect(canvas, r1, cv::Scalar(255), 5, lineType);
 
	//畫高縮減后的矩形
	cv::RotatedRect r2 = newrotatedrect;
	r2.size.height = r2.size.height - 2 * radius;
	DrawRotatedRect(canvas, r2, cv::Scalar(255), 5,lineType);
 
	//畫四個(gè)角的圓
	cv::RotatedRect r3 = r2;
	r3.size.width = r1.size.width;
 
	cv::Point2f ps[4];
	r3.points(ps);
 
	for (int i = 0; i != 4; ++i) {
		cv::circle(canvas, ps[i], (int)radius, cv::Scalar(255), 5);
	}
	std::vector<std::vector<cv::Point>> EXcontours;
	cv::findContours(canvas, EXcontours, cv::RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
	drawContours(mask, EXcontours, 0, color, thickness, lineType);  // 填充mask
 
}
 
// 繪制旋轉(zhuǎn)矩形
void DrawRotatedRect(cv::Mat mask,const cv::RotatedRect rotatedrect,const cv::Scalar &color, int thickness,int lineType)
{
	cv::Point2f ps[4];
	rotatedrect.points(ps);
 
	std::vector<std::vector<cv::Point>> tmpContours;    // 創(chuàng)建一個(gè)InputArrayOfArrays 類型的點(diǎn)集
	std::vector<cv::Point> contours;
	for (int i = 0; i != 4; ++i) {
		contours.emplace_back(cv::Point2i(ps[i]));
	}
	tmpContours.insert(tmpContours.end(), contours);
	drawContours(mask, tmpContours, 0, color, thickness, lineType);  // 填充mask
}

測(cè)試代碼

#include <iostream>
#include <opencv2/opencv.hpp>
#include <stdio.h>
using namespace std;
using namespace cv;
 
void DrawRotatedRectChamfer(cv::Mat mask, const cv::RotatedRect rotatedrect, float radius, const cv::Scalar &color, int thickness, int lineType);
void DrawRotatedRect(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(800, 600), 50);
	DrawRotatedRectChamfer(result, rorect, 100, cv::Scalar(0, 0, 255), 5, 16);
	imshow("original", src);
	imshow("result", result);
	waitKey(0);
	return 0;
}
 
// 繪制圓角矩形
void DrawRotatedRectChamfer(cv::Mat mask,const cv::RotatedRect rotatedrect, float radius,const cv::Scalar &color, int thickness, int lineType)
{
	// 創(chuàng)建畫布
	cv::Mat canvas = cv::Mat::zeros(mask.size(), CV_8UC1);
 
	cv::RotatedRect newrotatedrect = rotatedrect;
 
	//畫寬縮減后的矩形
	cv::RotatedRect r1 = newrotatedrect;
	r1.size.width = r1.size.width - 2 * radius;
	DrawRotatedRect(canvas, r1, cv::Scalar(255), 5, lineType);
 
	//畫高縮減后的矩形
	cv::RotatedRect r2 = newrotatedrect;
	r2.size.height = r2.size.height - 2 * radius;
	DrawRotatedRect(canvas, r2, cv::Scalar(255), 5,lineType);
 
	//畫四個(gè)角的圓
	cv::RotatedRect r3 = r2;
	r3.size.width = r1.size.width;
 
	cv::Point2f ps[4];
	r3.points(ps);
 
	for (int i = 0; i != 4; ++i) {
		cv::circle(canvas, ps[i], (int)radius, cv::Scalar(255), 5);
	}
	std::vector<std::vector<cv::Point>> EXcontours;
	cv::findContours(canvas, EXcontours, cv::RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
	drawContours(mask, EXcontours, 0, color, thickness, lineType);  // 填充mask
 
}
 
// 繪制旋轉(zhuǎn)矩形
void DrawRotatedRect(cv::Mat mask,const cv::RotatedRect rotatedrect,const cv::Scalar &color, int thickness,int lineType)
{
	cv::Point2f ps[4];
	rotatedrect.points(ps);
 
	std::vector<std::vector<cv::Point>> tmpContours;    // 創(chuàng)建一個(gè)InputArrayOfArrays 類型的點(diǎn)集
	std::vector<cv::Point> contours;
	for (int i = 0; i != 4; ++i) {
		contours.emplace_back(cv::Point2i(ps[i]));
	}
	tmpContours.insert(tmpContours.end(), contours);
	drawContours(mask, tmpContours, 0, color, thickness, lineType);  // 填充mask
}

測(cè)試效果

圖1 原圖

圖2 繪制圓角矩形

繪制圓角矩形其實(shí)是繪制了兩個(gè)旋轉(zhuǎn)矩形,交叉組合,然后以四交點(diǎn)為圓心繪制圓,就組成了圓角矩形,如圖3所示。


圖3 繪制邏輯

同理,這個(gè)最好不要繪制到圖像外面,否則它在分析外圍線的時(shí)候會(huì)出錯(cuò),可以多加些判斷來修正,我就不寫了,交給兄弟們研究一下~

總結(jié)

到此這篇關(guān)于OpenCV繪制圓角矩形的文章就介紹到這了,更多相關(guān)OpenCV繪制圓角矩形內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)爬蟲從網(wǎng)絡(luò)上下載文檔的實(shí)例代碼

    Python實(shí)現(xiàn)爬蟲從網(wǎng)絡(luò)上下載文檔的實(shí)例代碼

    小編最近在研究python,接觸到了爬蟲,本文給大家?guī)砹薖ython實(shí)現(xiàn)爬蟲從網(wǎng)絡(luò)上下載文檔的知識(shí)。下面小編把具體實(shí)例代碼分享到腳本之家平臺(tái),感興趣的朋友參考下吧
    2018-06-06
  • python爬蟲添加請(qǐng)求頭代碼實(shí)例

    python爬蟲添加請(qǐng)求頭代碼實(shí)例

    這篇文章主要介紹了python爬蟲添加請(qǐng)求頭代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • np.newaxis()函數(shù)的具體使用

    np.newaxis()函數(shù)的具體使用

    本文主要介紹了np.newaxis()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python棧類實(shí)例分析

    Python棧類實(shí)例分析

    這篇文章主要介紹了Python棧類,實(shí)例分析了Python實(shí)現(xiàn)棧的入棧、出棧、移除、判定為空的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • Python中的pathlib.Path為什么不繼承str詳解

    Python中的pathlib.Path為什么不繼承str詳解

    這篇文章主要給大家介紹了關(guān)于Python中pathlib.Path為什么不繼承str的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python對(duì)象與json數(shù)據(jù)的轉(zhuǎn)換問題實(shí)例詳解

    Python對(duì)象與json數(shù)據(jù)的轉(zhuǎn)換問題實(shí)例詳解

    JSON(JavaScript?Object?Notation)?是一種輕量級(jí)的數(shù)據(jù)交換格式,很受廣大用戶喜愛,今天通過本文給大家介紹Python對(duì)象與json數(shù)據(jù)的轉(zhuǎn)換問題,需要的朋友可以參考下
    2022-07-07
  • python測(cè)試mysql寫入性能完整實(shí)例

    python測(cè)試mysql寫入性能完整實(shí)例

    這篇文章主要介紹了python測(cè)試mysql寫入性能完整實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • python中實(shí)現(xiàn)精確的浮點(diǎn)數(shù)運(yùn)算詳解

    python中實(shí)現(xiàn)精確的浮點(diǎn)數(shù)運(yùn)算詳解

    計(jì)算機(jī)智能處理可數(shù)集合的運(yùn)算,但是全體實(shí)數(shù)是不可數(shù)的,所以計(jì)算機(jī)只能用一些奇怪的方法來擬合他,于是就產(chǎn)生了浮點(diǎn)數(shù)。下面這篇文章主要給大家介紹了關(guān)于python中實(shí)現(xiàn)精確浮點(diǎn)數(shù)運(yùn)算的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Python實(shí)現(xiàn)的字典排序操作示例【按鍵名key與鍵值value排序】

    Python實(shí)現(xiàn)的字典排序操作示例【按鍵名key與鍵值value排序】

    這篇文章主要介紹了Python實(shí)現(xiàn)的字典排序操作,結(jié)合實(shí)例形式分析了Python針對(duì)字典分別按照鍵名key與鍵值value進(jìn)行排序的相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • python實(shí)現(xiàn)批量文件重命名

    python實(shí)現(xiàn)批量文件重命名

    這篇文章主要介紹了python實(shí)現(xiàn)批量文件重命名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評(píng)論

广东省| 固镇县| 奇台县| 商南县| 休宁县| 玛沁县| 故城县| 五峰| 泸水县| 易门县| 新安县| 循化| 万宁市| 开原市| 上饶县| 迁西县| 兴隆县| 大同市| 青冈县| 朝阳区| 高雄市| 武山县| 库尔勒市| 繁昌县| 陈巴尔虎旗| 根河市| 秦安县| 谷城县| 娱乐| 天水市| 苏州市| 大同市| 南阳市| 如皋市| 安仁县| 昆山市| 上思县| 阿克| 龙岩市| 武邑县| 九江县|