#include "stdio.h"
#include "cv.h"
#include "highgui.h"
#include "Math.h"
#define max_corners 4
int Otsu(IplImage* src);
int main(int argc, char*argv[])
{
IplImage* img = cvLoadImage("C:\\Users\\aoe\\Desktop\\the last\\20160716_3DMeasurement\\1.jpg", 0);
cvNamedWindow("img", 1);
cvShowImage("img", img);
double sum = 0.0;//求图像灰度平均值
for (int y = 0; y < img->height; y++)
{
for (int x = 0; x < img->width; x++)
{
CvScalar cs = { 0.0 };
cs=cvGet2D(img, y, x);
sum += cs.val[0];
}
}
double average = 0.0;//as.val[0]是double类型的数据
average = sum / ((img->height)*(img->width));
printf("sum=%lf\n", sum);
printf("average=%lf\n", average);
IplImage* aver = cvCreateImage(cvGetSize(img), 8, 1);//生成一幅像素值均为上一幅图像的像素的均值的图像
for (int y = 0; y < aver->height; y++)
{
for (int x = 0; x < aver->width; x++)
{
CvScalar cs = { 0.0 };
cs.val[0]=average;
cvSet2D(aver, y, x,cs);
}
}
cvNamedWindow("aver", 1);
cvShowImage("aver", aver);
IplImage* next = cvCreateImage(cvGetSize(img), 8, 1);//生成一幅像素值减去图像像素的均值的图像
for (int y = 0; y < next->height; y++)
{
for (int x = 0; x < next->width; x++)
{
CvScalar cs = {
0.0};
cs = cvGet2D(img, y, x);
CvScalar ds = { 0.0 };
if (cs.val[0] > average)
ds.val[0] = average;
else
ds.val[0] = cs.val[0];
cvSet2D(next, y, x, ds);
}
}
cvNamedWindow("next", 1);
cvShowImage("next", next);
IplImage* dst = cvCreateImage(cvGetSize(img), 8, 1);
int threshold = Otsu(next);//最大类间方差阈值分割
printf("threshold = %d\n", threshold);
cvThreshold(next, dst, threshold, 255, CV_THRESH_BINARY);
cvNamedWindow("dst", 1);
cvShowImage("dst", dst);
/* IplImage* im_median_filter = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
cvSmooth(dst, im_median_filter, CV_MEDIAN, 3);//中值滤波
cvNamedWindow("im_median_filter", 1);
cvShowImage("im_median_filter", im_median_filter);*/
CvRect roi = cvRect(30, 30, 120, 120);//去除复杂背景
IplImage* img1 = cvCreateImage(cvGetSize(dst), dst->depth, dst->nChannels);
for (int
opencv——检测四边形的四个角点(二)
最新推荐文章于 2024-07-21 15:47:09 发布
本文详细探讨了如何使用OpenCV库在图像处理中检测四边形的四个角点,包括关键步骤和算法原理,对于计算机视觉开发者极具参考价值。
摘要由CSDN通过智能技术生成