opencv——检测四边形的四个角点(二)

本文详细探讨了如何使用OpenCV库在图像处理中检测四边形的四个角点,包括关键步骤和算法原理,对于计算机视觉开发者极具参考价值。
摘要由CSDN通过智能技术生成
#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 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值