opencv 最大内接矩形笔记
include
using namespace std;
/**
*/
bool expandEdge(const Mat & img, int edge[], const int edgeID)
{
//[1] --初始化参数
int nc = img.cols;
int nr = img.rows;
switch (edgeID) {
case 0:
if (edge[0]>nr)
return false;
for (int i = edge[3];
i <= edge[1];
++i)
{
if (img.at
case 1:
if (edge[1]>nc)
return false;
for (int i = edge[2];
i <= edge[0];
++i)
{
if (img.at
case 2:
if (edge[2]<0)
return false;
for (int i = edge[3];
i <= edge[1];
++i)
{
if (img.at
case 3:
if (edge[3]<0)
return false;
for (int i = edge[2];
i <= edge[0];
++i)
{
if (img.at
default:
return false;
break;
}
}
/**
*/
cv::Rect InSquare(Mat &img, const Point center)
{
// --[1]参数检测
if (img.empty() ||img.channels()>1|| img.depth()>8)
return Rect();
// --[2] 初始化变量
int edge[4];
edge[0] = center.y + 1;
//top
edge[1] = center.x + 1;
//right
edge[2] = center.y - 1;
//bottom
edge[3] = center.x - 1;
//left
//[2]
// --[3]边界扩展(中心扩散法)
bool EXPAND[4] = { 1,1,1,1 };
//扩展标记位
int n = 0;
while (EXPAND[0] || EXPAND[1] || EXPAND[2] || EXPAND[3])
{
int edgeID = n % 4;
EXPAND[edgeID] = expandEdge(img, edge, edgeID);
n++;
}
//[3]
//qDebug() << edge[0] << edge[1] << edge[2] << edge[3];
Point tl = Point(edge[3], edge[0]);
Point br = Point(edge[1], edge[2]);
return Rect(tl, br);
}
int main()
{
bool isExistence = false;
float first_area = 0;
/// 加载源图像
Mat src;
src = https://www.it610.com/article/imread("cen.bmp", 1);
//src = https://www.it610.com/article/imread("C:\Users\Administrator\Desktop\测试图片\xxx\20190308152516.jpg",1);
//src = https://www.it610.com/article/PayPal下载imread("C:\Users\Administrator\Desktop\测试图片\xx\20190308151912.jpg",1);
//src = https://www.it610.com/article/imread("C:\Users\Administrator\Desktop\测试图像\2\BfImg17(x-247 y--91 z--666)-(492,280).jpg",1);
cvtColor(src, src, CV_RGB2GRAY);
threshold(src, src, 100, 255, THRESH_BINARY);
Rect ccomp;
Point center(src.cols / 2, src.rows / 2);
//floodFill(src, center, Scalar(255, 255, 55), &ccomp, Scalar(20, 20, 20), Scalar(20, 20, 20));
if (src.empty())
{
cout << "fali" << endl;
【opencv 最大内接矩形笔记】}
//resize(src, src, cv::Size(496, 460), cv::INTER_LINEAR);
imshow("src", src);
Rect rr = InSquare(src, center);
rectangle(src, rr, Scalar(255), 1, 8);
imshow("src2", src);
waitKey(0);
getchar();
return 0;
}
推荐阅读
- opencv|opencv C++模板匹配的简单实现
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 无私便是最大的自私---多久没有无私过了
- 人最大的教养,是原谅父母的不完美.读后感
- 股票最大利润|股票最大利润 II
- 公司最大的问题在中层|公司最大的问题在中层 管理
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- 2016,我最大的成就是找回自己
- OpenCV|OpenCV for Unity 通过WebCamTextureToMatHelper帮助类来获取摄像头的画面
- opencv学习