金字塔压力-面积-位移图像识别 外接矩形绘制(wcy)
金字塔压力-面积-位移图像识别 外接矩形绘制(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)相关推荐
- 二值图像最小外接矩形(正)
实现二值图像最小外接矩形(正) 用于目标识别 散点图画框 % 原文链接:https://blog.csdn.net/rosfreshman/article/details/116380981 原文效果 ...
- opencv 图像轮廓特征 图像面积,轮廓周长,外接矩形、最小外接矩形、最小外接圆、拟合椭圆
找出图像轮廓 contours, hierarchy = cv.findContours(thresh, 3, 2) 画出图像轮廓 cnt = contours[1] cv.drawContours( ...
- opencv findContours()轮廓特征分析大全(求面积、周长、几何矩、质心、凸包、最小外接矩形、最小外接三角形、最小外接椭圆等)
文章目录 前言 一.效果 二.opencv对应函数介绍 1.轮廓面积 2.轮廓周长 3.轮廓几何矩 4.轮廓的最大外接矩形 5.轮廓的凸包 6.轮廓的最小外接矩形 7.轮廓的最小外接三角形 8.轮廓的 ...
- python opencv最小外接矩形_Opencv绘制最小外接矩形、最小外接圆
Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...
- opencv学习之路(25)、轮廓查找与绘制(四)——正外接矩形
一.简介 二.外接矩形的查找绘制 1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 void main() 4 { 5 ...
- UVA10173(求凸包的面积最小外接矩形)
题目:10173 - Smallest Bounding Rectangle 求凸包的最小外接矩形的面积. 思路: 旋转卡壳 给定点集S,求S的最小覆盖矩形 最小覆盖矩形的四条边上,其中一条边有至少两 ...
- python opencv最小外接矩形中心点_Opencv绘制最小外接矩形、最小外接圆
Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...
- 【千律】OpenCV基础:图像外接矩形、最小外接矩形、凸包、外接圆、拟合椭圆的绘制
环境:Python3.8 和 OpenCV 内容:图像外接矩形.最小外接矩形.凸包.外接圆.拟合椭圆的绘制 import cv2 as cv import numpy as np import mat ...
- 最小外接矩形思路以及实现
最小外接矩形 外接矩形计算 对一个凸多边形进行外接矩形计算,需要知道当前面的最大xy 和最小xy值,即可获得外接矩形 最小外接矩形计算 对凸多边形的每一条边都绘制一个外接矩形求最小面积.下图展示了计算 ...
最新文章
- 不同模块下包重名怎么解决_模块
- fushioncharts破解
- 0ctf 2017 kernel pwn knote write up
- 在Win7中怎样打开摄像头?
- 腾讯发布 Tencent SCF Toolkit VS Code 插件,轻松开发无服务器云函数
- Forward框架的逆袭:解析Forward+渲染
- AlphaFold2开源了,不是土豪也不会编程的你怎么蹭一波?
- AJAX使用技巧:如何处理书签和翻页按扭
- ChaiNext:过去24小时大盘震荡调整
- 我正在运行哪个版本的PostgreSQL?
- nginx 设置端口访问网站
- 数据包接收系列 — 上半部实现(网卡驱动)
- 二元信号探测的误检概率推导与其matlab验证
- Java字符串排序设计(升序排列)
- python 战舰_在python中的战舰游戏
- linux持续测试ip端口延迟,Linux下使用nping测试TCP\UDP延迟
- 下关便装特沱微刻辩识
- 原子的波尔模型、能量量子化、光电效应、光谱实验、量子态、角动量
- AutoSAR开发的三种方法:自上而下式、自下而上式、混合式
- 用C语言打印简单图案(爱心\圆形\三角形等)
热门文章
- 计算机考证含金量排行榜
- [laf] 2014 FIFA World Cup Brazil
- 久坐电脑者养生从养肝开始
- Core Shell: 在macOS上高效管理SSH服务器
- 关于Cadence导出网表
- HTML:网页设计案例2
- 5-FAM Maleimide,787632-00-2,5-FAM马来酰亚胺是荧光素的巯基反应性衍生物
- 倒计时3天! dfuse,慢雾,MYKEY技术负责人齐聚, 一站掌握区块链数据架构的秘密!...
- 车削加工编程一般包含X和Z坐标运动及绕Z轴旋转的转角坐标
- Docker切换国内镜像下载源