金字塔压力-面积-位移图像识别 外接矩形绘制(wcy)

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/types_c.h>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/features2d.hpp>
#include <opencv2/core.hpp>
#include <opencv2/objdetect.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{cv::Mat image = cv::imread("E://image//3.jpg");//载入图像cv::Mat imageGray;cvtColor(image, imageGray, COLOR_BGR2GRAY); //转换为灰度图像//IplImage* img = cvLoadImage("E://image//1.png");if (imageGray.empty()){std::cout << "read image failure" << std::endl;return -1;}/*RNG rng((unsigned)time(NULL)); //生成随机数Mat Canny_output;vector<vector<Point>> contours; //边缘矢量vector<Vec4i> hierarchy;   //形状因子Canny(local, Canny_output, 200, 500, 3);  //边缘检测imshow("canny", Canny_output);findContours(Canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); //轮廓提取Mat drawing = Mat::zeros(Canny_output.size(), CV_8UC3); //新建一样大小的图像for (int i = 0; i < contours.size();i++)   //每个新的边缘赋RBG随机数{Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, Point()); //画出轮廓}imshow("contours", drawing);*///    Mat result;
//  Canny(image, result, 50, 150, 3);
//  //cv::imshow("localThreshold", local);//imshow("jieguo", result);//使用不同的二值化方法,再进行判断// 全局二值化int th = 100;cv::Mat global;//全局二值化图像globalcv::threshold(imageGray, global, th, 255,CV_THRESH_BINARY);// 局部自适应阈值二值化int blockSize =95;//邻域范围(2-40:95,-35)(50:95,-20)(60:95,-5)(70-80:385,-5)int constValue =-5;//补偿值cv::Mat local; //局部二值化图像localcv::adaptiveThreshold(imageGray, local, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, blockSize, constValue);imshow("global", global);imshow("local", local);int rows = local.rows; //获取图像像素行int cols = local.cols;    //获取图像像素列vector<vector<Point>> contours;  // 轮廓容器//vector<vector<Point>> contours1;Rect centerRect(rows / 2 - 10, cols / 2 - 10, 20, 20); //定义中心矩阵vector<Vec4i> hierarcy;   findContours(local, contours, hierarcy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);vector<Rect> boundRect(contours.size());  //定义外接矩形集合vector<RotatedRect> box(contours.size()); //定义最小外接矩形集合// vector<Point> cen;  //中心点集合Point2f rect[4];//Point cenfor(int i=0; i<contours.size(); i++)    {box[i] = minAreaRect(Mat(contours[i]));  //计算每个轮廓最小外接矩形2         boundRect[i] = boundingRect(Mat(contours[i]));double area = (box[i].size.width)* (box[i].size.height);//计算面积if (area > 1){//cout << "矩形面积为: " << area << endl;//判断外接矩形的中心点是否为图片的中心if (box[i].center.x > centerRect.x && box[i].center.y > centerRect.y &&  box[i].center.y < centerRect.y + centerRect.height &&box[i].center.x < centerRect.x + centerRect.width){circle(image, Point(box[i].center.x, box[i].center.y), 2, Scalar(0, 255, 0), -1, 8);  //绘制最小外接矩形的中心点cout << "矩形面积为: " << area << endl;box[i].points(rect);  //把最小外接矩形四个端点复制给rect数组//double area = (box[i].size.width)* (box[i].size.height);//计算面积//cout << "矩形面积为: " << area << endl;rectangle(image, Point(boundRect[i].x, boundRect[i].y), Point(boundRect[i].x + boundRect[i].width, boundRect[i].y + boundRect[i].height), Scalar(0, 255, 0), 2, 8);//double recArea = contourArea(box[i],false);for (int j = 0; j < 4; j++){line(image, rect[j], rect[(j + 1) % 4], Scalar(0, 0, 255), 2, 8);  //绘制最小外接矩形每条边}}}}    imshow("dst", image);/* if (local.at<uchar>((local.rows) / 2, (local.cols) / 2)  = 0 && global.at<uchar>((local.rows) / 2, (local.cols) / 2)  > 0)//cv::imwrite("global.jpg", global);//cv::imwrite("local.jpg", local){int global_whiteNum = 0;int global_blackNum = 0;int rows = global.rows;int cols = global.cols;for (int j = 0; j < rows; j++)//遍历二值图像{for (int i = 0; i < cols; i++)  {if (global.at<uchar>(j, i) > 0) //计算黑白像素点总个数{global_whiteNum++;}else global_blackNum++;}}imshow("image", image);imshow("Gray", imageGray);cv::imshow("globalThreshold", global);//cv::imshow("localThreshold", local);cout << "global白色像素点一共有:" << global_whiteNum << endl;cout << "global黑色像素点一共有:" << global_blackNum << endl;}else {int local_blackNum = 0;int local_whiteNum = 0;int rows = local.rows;int cols = local.cols;for (int j = 0; j < rows; j++){for (int i = 0; i < cols; i++){if (local.at<uchar>(j, i) > 0){local_whiteNum++;}else local_blackNum++;}}imshow("image", image);imshow("Gray", imageGray);//cv::imshow("globalThreshold", global);cv::imshow("localThreshold", local);cout << "local白色像素点一共有:" << local_whiteNum << endl;cout << "local黑色像素点一共有:" << local_blackNum << endl;}*/cv::waitKey(0);return 0;
}

金字塔压力-面积-位移图像识别 外接矩形绘制(wcy)相关推荐

  1. 二值图像最小外接矩形(正)

    实现二值图像最小外接矩形(正) 用于目标识别 散点图画框 % 原文链接:https://blog.csdn.net/rosfreshman/article/details/116380981 原文效果 ...

  2. opencv 图像轮廓特征 图像面积,轮廓周长,外接矩形、最小外接矩形、最小外接圆、拟合椭圆

    找出图像轮廓 contours, hierarchy = cv.findContours(thresh, 3, 2) 画出图像轮廓 cnt = contours[1] cv.drawContours( ...

  3. opencv findContours()轮廓特征分析大全(求面积、周长、几何矩、质心、凸包、最小外接矩形、最小外接三角形、最小外接椭圆等)

    文章目录 前言 一.效果 二.opencv对应函数介绍 1.轮廓面积 2.轮廓周长 3.轮廓几何矩 4.轮廓的最大外接矩形 5.轮廓的凸包 6.轮廓的最小外接矩形 7.轮廓的最小外接三角形 8.轮廓的 ...

  4. python opencv最小外接矩形_Opencv绘制最小外接矩形、最小外接圆

    Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...

  5. opencv学习之路(25)、轮廓查找与绘制(四)——正外接矩形

    一.简介 二.外接矩形的查找绘制 1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 void main() 4 { 5 ...

  6. UVA10173(求凸包的面积最小外接矩形)

    题目:10173 - Smallest Bounding Rectangle 求凸包的最小外接矩形的面积. 思路: 旋转卡壳 给定点集S,求S的最小覆盖矩形 最小覆盖矩形的四条边上,其中一条边有至少两 ...

  7. python opencv最小外接矩形中心点_Opencv绘制最小外接矩形、最小外接圆

    Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...

  8. 【千律】OpenCV基础:图像外接矩形、最小外接矩形、凸包、外接圆、拟合椭圆的绘制

    环境:Python3.8 和 OpenCV 内容:图像外接矩形.最小外接矩形.凸包.外接圆.拟合椭圆的绘制 import cv2 as cv import numpy as np import mat ...

  9. 最小外接矩形思路以及实现

    最小外接矩形 外接矩形计算 对一个凸多边形进行外接矩形计算,需要知道当前面的最大xy 和最小xy值,即可获得外接矩形 最小外接矩形计算 对凸多边形的每一条边都绘制一个外接矩形求最小面积.下图展示了计算 ...

最新文章

  1. 不同模块下包重名怎么解决_模块
  2. fushioncharts破解
  3. 0ctf 2017 kernel pwn knote write up
  4. 在Win7中怎样打开摄像头?
  5. 腾讯发布 Tencent SCF Toolkit VS Code 插件,轻松开发无服务器云函数
  6. Forward框架的逆袭:解析Forward+渲染
  7. AlphaFold2开源了,不是土豪也不会编程的你怎么蹭一波?
  8. AJAX使用技巧:如何处理书签和翻页按扭
  9. ChaiNext:过去24小时大盘震荡调整
  10. 我正在运行哪个版本的PostgreSQL?
  11. nginx 设置端口访问网站
  12. 数据包接收系列 — 上半部实现(网卡驱动)
  13. 二元信号探测的误检概率推导与其matlab验证
  14. Java字符串排序设计(升序排列)
  15. python 战舰_在python中的战舰游戏
  16. linux持续测试ip端口延迟,Linux下使用nping测试TCP\UDP延迟
  17. 下关便装特沱微刻辩识
  18. 原子的波尔模型、能量量子化、光电效应、光谱实验、量子态、角动量
  19. AutoSAR开发的三种方法:自上而下式、自下而上式、混合式
  20. 用C语言打印简单图案(爱心\圆形\三角形等)

热门文章

  1. 计算机考证含金量排行榜
  2. [laf] 2014 FIFA World Cup Brazil
  3. 久坐电脑者养生从养肝开始
  4. Core Shell: 在macOS上高效管理SSH服务器
  5. 关于Cadence导出网表
  6. HTML:网页设计案例2
  7. 5-FAM Maleimide,787632-00-2,5-FAM马来酰亚胺是荧光素的巯基反应性衍生物
  8. 倒计时3天! dfuse,慢雾,MYKEY技术负责人齐聚, 一站掌握区块链数据架构的秘密!...
  9. 车削加工编程一般包含X和Z坐标运动及绕Z轴旋转的转角坐标
  10. Docker切换国内镜像下载源