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

主頁 > 知識庫 > OpenCV繪制圓角矩形的方法實例

OpenCV繪制圓角矩形的方法實例

熱門標簽:地圖標注多個 鶴壁手機自動外呼系統違法嗎 B52系統電梯外呼顯示E7 怎么辦理400客服電話 萊蕪電信外呼系統 銀川電話機器人電話 企業微信地圖標注 高德地圖標注收入咋樣 沈陽防封電銷電話卡

功能函數

// 繪制圓角矩形
void DrawRotatedRectChamfer(cv::Mat mask,const cv::RotatedRect rotatedrect, float radius,const cv::Scalar color, int thickness, int lineType)
{
	// 創建畫布
	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);
 
	//畫四個角的圓
	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::vectorstd::vectorcv::Point>> EXcontours;
	cv::findContours(canvas, EXcontours, cv::RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
	drawContours(mask, EXcontours, 0, color, thickness, lineType);  // 填充mask
 
}
 
// 繪制旋轉矩形
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::vectorstd::vectorcv::Point>> tmpContours;    // 創建一個InputArrayOfArrays 類型的點集
	std::vectorcv::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
}

測試代碼

#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)
{
	// 創建畫布
	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);
 
	//畫四個角的圓
	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::vectorstd::vectorcv::Point>> EXcontours;
	cv::findContours(canvas, EXcontours, cv::RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
	drawContours(mask, EXcontours, 0, color, thickness, lineType);  // 填充mask
 
}
 
// 繪制旋轉矩形
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::vectorstd::vectorcv::Point>> tmpContours;    // 創建一個InputArrayOfArrays 類型的點集
	std::vectorcv::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
}

測試效果

圖1 原圖

圖2 繪制圓角矩形

繪制圓角矩形其實是繪制了兩個旋轉矩形,交叉組合,然后以四交點為圓心繪制圓,就組成了圓角矩形,如圖3所示。


圖3 繪制邏輯

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

總結

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

您可能感興趣的文章:
  • Opencv繪制最小外接矩形、最小外接圓
  • OpenCV鼠標繪制矩形和截取矩形區域圖像
  • python opencv常用圖形繪制方法(線段、矩形、圓形、橢圓、文本)

標簽:葫蘆島 三亞 湘西 銀川 呼倫貝爾 烏魯木齊 安慶 呼倫貝爾

巨人網絡通訊聲明:本文標題《OpenCV繪制圓角矩形的方法實例》,本文關鍵詞  OpenCV,繪制,圓角,矩,形的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《OpenCV繪制圓角矩形的方法實例》相關的同類信息!
  • 本頁收集關于OpenCV繪制圓角矩形的方法實例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 乐东| 麦盖提县| 商洛市| 通化市| 米泉市| 新巴尔虎右旗| 都江堰市| 乌兰察布市| 吴旗县| 荣成市| 荆州市| 含山县| 昆明市| 汝城县| 武城县| 临城县| 麦盖提县| 古田县| 牙克石市| 云龙县| 保山市| 大同市| 丘北县| 西吉县| 五莲县| 开平市| 蕉岭县| 淳化县| 剑河县| 正安县| 卢龙县| 新干县| 西青区| 余江县| 上栗县| 永和县| 额济纳旗| 定远县| 确山县| 巴里| 资源县|