分享
 
 
 

我的第一个openCV程序,是改别人的成果,呵呵。

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

我的第一个openCV程序,是改别人的成果,呵呵。

实现了简单的图像处理功能,更多的程序,会随着我的学习逐渐添加。

// cvmedianfilterDlg.cpp : implementation file

//

#include "stdafx.h"

#include "cvmedianfilter.h"

#include "cvmedianfilterDlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

#include "cvaux.h"

#include "cv.h"

#include "highgui.h"

//#include "ijl.h" ????

#include "cvcam.h"

#include "math.h"

//#include "ipl.h"

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <assert.h>

#include <float.h>

#include <limits.h>

#include <time.h>

#include <ctype.h>

#include <direct.h>

//#include "dibapi.h" ????

#pragma comment(lib,"cvaux.lib")

#pragma comment(lib,"cvcam.lib")

//#pragma comment(lib,"ijl15.lib") ????

#pragma comment(lib,"cv.lib")

#pragma comment(lib, "highgui.lib")

#define ORIG_WIN_SIZE 24

static CvMemStorage* storage1 = 0;

static CvHidHaarClassifierCascade* hid_cascade = 0;

//on_mouse( int event, int x, int y, int flags );

IplImage* detect_and_draw( IplImage* image );

char filename[]="D:\\Sample256-1.bmp";

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CCvmedianfilterDlg dialog

CCvmedianfilterDlg::CCvmedianfilterDlg(CWnd* pParent /*=NULL*/)

: CDialog(CCvmedianfilterDlg::IDD, pParent)

{

//m_num = 0;

//{{AFX_DATA_INIT(CCvmedianfilterDlg)

// NOTE: the ClassWizard will add member initialization here

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CCvmedianfilterDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//DDX_Text(pDX, IDC_NUM, m_num);

//{{AFX_DATA_MAP(CCvmedianfilterDlg)

// NOTE: the ClassWizard will add DDX and DDV calls here

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CCvmedianfilterDlg, CDialog)

//{{AFX_MSG_MAP(CCvmedianfilterDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_gray, Ongray)

ON_BN_CLICKED(IDC_medfilter, Onmedfilter)

ON_BN_CLICKED(IDC_singreen, Onsingreen)

ON_BN_CLICKED(IDC_noise, Onnoise)

ON_BN_CLICKED(IDC_saltnoise, Onsaltnoise)

ON_BN_CLICKED(IDC_BUTTON1, OnCanny)

ON_BN_CLICKED(IDC_BUTTON2, OnThreshold)

ON_BN_CLICKED(IDC_Laplace, OnLaplace)

ON_BN_CLICKED(IDC_Log, OnLog)

ON_BN_CLICKED(IDC_Tough, OnTough)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CCvmedianfilterDlg message handlers

BOOL CCvmedianfilterDlg::OnInitDialog()

{

CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control

}

void CCvmedianfilterDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CCvmedianfilterDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CCvmedianfilterDlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

void CCvmedianfilterDlg::Ongray()

{

// TODO: Add your control notification handler code here

UpdateData(true);

char filename[]="D:\\Sample256-1.bmp";

//char filename[]="F:\\switty\\opencv吕斌\newimage008.dib";//"F:\xhl\搞笑图片\ert.jpg";

char *wndname;

IplImage *gray = 0,*gray2=0;

gray=cvLoadImage(filename,1);

// gray2=cvLoadImage(filename,1);

gray2=cvCreateImage(cvSize(gray->width,gray->height),IPL_DEPTH_8U,1);

wndname="GRAY2BGR";

cvNamedWindow(wndname,1);

cvCvtColor(gray, gray2, CV_BGR2GRAY); //rgb转换为灰度

cvShowImage(wndname,gray2);

cvWaitKey(0);

cvReleaseImage(&gray);

cvReleaseImage(&gray2);

cvDestroyWindow( wndname );

}

void CCvmedianfilterDlg::Onmedfilter()

{

// TODO: Add your control notification handler code here

char filename2[]="D:\\Sample256-1.bmp";

char filename1[]="D:\\Sample256-1.bmp";

char filename[]="D:\\Sample256-1.bmp";

char *wndname;

IplImage *gray,*gray2,*dst,*dst3;

gray=cvLoadImage(filename,1);

gray2=cvCreateImage(cvSize(gray->width,gray->height),IPL_DEPTH_8U,1);

dst=cvCreateImage(cvSize(gray->width,gray->height),IPL_DEPTH_8U,4);

dst3=cvCreateImage(cvSize(gray->width,gray->height),IPL_DEPTH_8U,3);

// wndname="以位图图像格式保存";

// cvSaveImage(filename1,dst3);//cvSaveImage(filename1,dst3);

// cvNamedWindow(wndname,1);

// gray1=cvLoadImage(filename1,1);

// cvShowImage(wndname,gray1);

if(num==0)

{

wndname="原图";

cvNamedWindow(wndname,1);

cvShowImage(wndname,gray);

wndname="灰度图像";

cvNamedWindow(wndname,1);

cvCvtColor(gray, gray2, CV_BGR2GRAY);

cvCvtColor(gray2,dst3,8);

cvShowImage(wndname,dst3);

cvWaitKey(0);

// cvReleaseImage(&gray);

// cvReleaseImage(&gray2);

// cvReleaseImage(&dst3);

// cvReleaseImage(&dst);

// cvDestroyWindow(wndname);

num=1;

}

else

{

CDC* pDC=GetDC();

CDC dcMem;

CBitmap myBitmap;

myBitmap.CreateCompatibleBitmap(pDC,gray->height,gray->width);

dcMem.CreateCompatibleDC(pDC);

dcMem.SelectObject(&myBitmap);

//char *rvalue=0,*bvalue=0,*gvalue=0;

DWORD iFilterH=3 ; // 滤波器的高度

DWORD iFilterW=3 ; // - 滤波器的宽度

DWORD iFilterMX=1 ; //- 滤波器的中心元素X坐标

DWORD iFilterMY=1 ; //- 滤波器的中心元素Y坐标

DWORD iFilterLen=iFilterH * iFilterW;//窗口大小

DWORD i,j,k,l,m,n;

DWORD temp,temp1;

BYTE r,r1,g,g1,b,b1,r2,g2,b2;

BYTE bTemp;

BYTE rvalue[9],bvalue[9],gvalue[9];

for(i=iFilterMY;i<(gray->height+iFilterMY+1);i++)

for(j=iFilterMX;j<(gray->width-iFilterW+iFilterMX+1);j++)

{

temp=i*(gray->width)*3+j*3;

r=(BYTE)(gray->imageData[temp]);

g=(BYTE)(gray->imageData[temp+1]);

b=(BYTE)(gray->imageData[temp+2]);

for (k = 0; k < iFilterH; k++)

for (l = 0; l < iFilterW; l++)

{

temp1=(i-iFilterMY+k)*(gray->width)*3+(j-iFilterMX+l)*3;

r1=(BYTE)(gray->imageData[temp1]);

g1=(BYTE)(gray->imageData[temp1+1]);

b1=(BYTE)(gray->imageData[temp1+2]);

rvalue[k * iFilterW + l]=r1;

bvalue[k * iFilterW + l]=b1;

gvalue[k * iFilterW + l]=g1;

}

for (m = 0; m < iFilterLen - 1; m ++)

for (n = 0; n < iFilterLen - m - 1; n ++)

if (rvalue[n] > rvalue[n + 1])

{

bTemp = rvalue[n];

rvalue[n] = rvalue[n + 1];

rvalue[n + 1] = bTemp;

}

r2=rvalue[(iFilterLen + 1) / 2];

for (m = 0; m < iFilterLen - 1; m ++)

for (n = 0; n < iFilterLen - m - 1; n ++)

if (bvalue[n] > bvalue[n + 1])

{

bTemp = bvalue[n];

bvalue[n] = bvalue[n + 1];

bvalue[n + 1] = bTemp;

}

b2=bvalue[(iFilterLen + 1) / 2];

for (m = 0; m < iFilterLen - 1; m ++)

for (n = 0; n < iFilterLen - m - 1; n ++)

if (gvalue[n] > gvalue[n + 1])

{

bTemp = gvalue[n];

gvalue[n] = gvalue[n + 1];

gvalue[n + 1] = bTemp;

}

g2=gvalue[(iFilterLen + 1) / 2];

//b2=(BYTE)GetMedianNum(bvalue, iFilterH * iFilterW);

//g2=(BYTE)GetMedianNum(gvalue, iFilterH * iFilterW);

//r2=(BYTE)GetMedianNum(rvalue, iFilterH * iFilterW);*/

dcMem.SetPixel(j,i,RGB(b2,g2,r2));

}

pDC->StretchBlt(0,0,gray->width,gray->height,&dcMem,0,0,gray->width,gray->height,SRCCOPY);

ReleaseDC(pDC);

ReleaseDC(&dcMem);

// cvReleaseImage(&gray1);

//cvDestroyWindow( wndname );

}

cvReleaseImage(&gray);

cvReleaseImage(&gray2);

cvReleaseImage(&dst3);

cvReleaseImage(&dst);

cvDestroyWindow( wndname );

}

void CCvmedianfilterDlg::OnOK()

{

// TODO: Add extra validation here

CDialog::OnOK();

}

void CCvmedianfilterDlg::Onsingreen() //打开源图像

{

// TODO: Add your control notification handler code here

char filename[]="D:\\Sample256-1.bmp";

char *wndname;

wndname="原图";

IplImage *image=0;

image=cvLoadImage(filename,1);

cvNamedWindow(wndname,1);

cvShowImage(wndname,image);

cvWaitKey(0);

cvReleaseImage(&image);

}

void CCvmedianfilterDlg::Onnoise()

{

// TODO: Add your control notification handler code here

char filename[]="D:\\Sample256-1.bmp";

char *wndname;

wndname="噪声图像";

IplImage *gray;

gray=cvLoadImage(filename,1);

cvNamedWindow(wndname,1);

cvShowImage(wndname,gray);

}

/*

void CCvmedianfilterDlg::Onsaltnoise()

{

// TODO: Add your control notification handler code here

char filename[]="D:\\Sample256-1.bmp";

char *wndname;

IplImage *gray = 0,*gray2=0,*gray3=0,*dst=0,*dst3=0;

gray=cvLoadImage(filename,1);

gray2=cvCreateImage(cvSize(gray->width,gray->height),IPL_DEPTH_8U,1);

gray3=cvCreateImage(cvSize(gray->width,gray->height),8,3);

dst3=cvCreateImage(cvSize(gray->width,gray->height),IPL_DEPTH_8U,3);

dst=cvCreateImage(cvSize(gray->width,gray->height),IPL_DEPTH_8U,4);

wndname="GRAY2BGR";

cvCvtColor(gray, gray2,CV_BGR2GRAY);

cvCvtColor(gray2,dst3,8);

gray3=cvCloneImage(dst3);

//以下加入椒盐噪声

CDC* pDC=GetDC();

CDC dcMem;

CBitmap myBitmap;

myBitmap.CreateCompatibleBitmap(pDC,gray3->height,gray3->width);

dcMem.CreateCompatibleDC(pDC);

dcMem.SelectObject(&myBitmap);

DWORD i,j;//,k,l,m,n;

DWORD temp;//,temp1;

BYTE r,g,b;

srand((unsigned)time(NULL));//生成伪随机种子

for (j = 0;j < gray3->height;j++)

{

for(i = 0;i < gray3->width ;i++)

{

// 指向源图像第j行,第i个象素的指针

temp =j* (gray3->width)*3+ i*3;

r=(BYTE)(dst3->imageData[temp]);

g=(BYTE)(dst3->imageData[temp+1]);

b=(BYTE)(dst3->imageData[temp+2]);

if(rand()>30000)

{

//图像中当前点置为黑

r=b=g=0;

dcMem.SetPixel(i,j,RGB(b,g,r));

}

else

{

dcMem.SetPixel(i,j,RGB(b,g,r));

}

}

}

pDC->StretchBlt(

0,

0,

gray3->width,

gray3->height,

&dcMem,

0,

0,

gray3->width*3,

gray3->height*3,

SRCCOPY);

// wndname="noisegray3";

// cvNamedWindow(wndname,1);

// cvShowImage(wndname,gray3);

//cvWaitKey(0);

// pDC->ReleaseDC(pDC);

cvReleaseImage(&gray3);

}

*/

void CCvmedianfilterDlg::Onsaltnoise()

{

// TODO: Add your control notification handler code here

char filename[]="D:\\Sample256-1.bmp";

char *wndname;

IplImage *gray = 0,*gray2=0,*gray3=0;

gray=cvLoadImage(filename,1);

gray2=cvCreateImage(cvSize(gray->width,gray->height),IPL_DEPTH_8U,1);

gray3=cvCreateImage(cvSize(gray->width,gray->height),8,3);

//cvCopy(gray,gray3); //在彩色图像加噪声

// cvCvtColor(gray,gray3,CV_BGR2GRAY); //在灰度图像加噪声,为什么这么写不行

cvCvtColor(gray, gray2,CV_BGR2GRAY); //在灰度图像加噪声

cvCvtColor(gray2,gray3,CV_GRAY2BGR);

DWORD i,j;

srand((unsigned)time(NULL));//生成伪随机种子

for (j = 0;j < gray3->height;j++)

{

for(i = 0;i < gray3->width ;i++)

{

if(rand()>30000)

{

//图像中当前点置为黑

((uchar*)(gray3->imageData + gray3->widthStep*j))[i*3] = 0;

((uchar*)(gray3->imageData + gray3->widthStep*j))[i*3+1] = 0;

((uchar*)(gray3->imageData + gray3->widthStep*j))[i*3+2] = 0;

}

}

}

wndname="noisegray3";

cvNamedWindow(wndname,1);

cvShowImage(wndname,gray3);

cvWaitKey(0);

cvReleaseImage(&gray3);

cvReleaseImage(&gray2);

cvReleaseImage(&gray);

}

void CCvmedianfilterDlg::OnCanny() //边缘检测

{

// TODO: Add your control notification handler code here

char filename[]="D:\\Sample256-1.bmp";

IplImage *ww=0,*ww1=0,*dst=0;

ww=cvLoadImage(filename,1);

ww1=cvCreateImage(cvSize(ww->width,ww->height),IPL_DEPTH_8U,1);

dst=cvCreateImage(cvSize(ww->width,ww->height),IPL_DEPTH_8U,1);

cvCvtColor(ww, ww1, CV_BGR2GRAY);

cvCanny(ww1,dst, 100, 200, 3 ); //cvCanny的源图像必须是灰度图像

// cvCanny(ww1,dst, 100, 200, 5 );

// cvCanny(ww1,dst, 100, 200, 7 );

cvNamedWindow("canny算子(核=3)",1);

cvShowImage("canny算子(核=3)",dst);

cvReleaseImage(&ww);

cvReleaseImage(&dst);

cvReleaseImage(&ww);

}

void CCvmedianfilterDlg::OnThreshold()

{

// TODO: Add your control notification handler code here

IplImage *log=0,*pyr=0,*log1=0,*log2=0;

IplImage *laplace=0,*laplace1=0,*dst=0, *thr=0;

log=cvLoadImage(filename,1);

pyr=cvCreateImage(cvSize(log->width/2,log->height/2),8,3);

laplace=cvCreateImage(cvSize(log->width,log->height),8,3);

cvPyrDown(log,pyr,CV_GAUSSIAN_5x5 );

cvPyrUp(pyr,laplace,CV_GAUSSIAN_5x5 );

laplace1=cvCreateImage(cvSize(log->width,log->height),IPL_DEPTH_8U,1);

dst=cvCreateImage(cvSize(log->width,log->height),IPL_DEPTH_16S,1);

cvCvtColor(laplace,laplace1, CV_BGR2GRAY);

cvLaplace(laplace1,dst,3);

thr=cvCreateImage(cvSize(log->width,log->height),IPL_DEPTH_8U,1);//wty

cvThreshold(dst,thr,25,255,CV_THRESH_BINARY);//wty二值化阈值增强

cvMean( thr, laplace1);

cvNamedWindow("LOG-二值化",1);

cvShowImage("LOG-二值化",thr);

cvReleaseImage(&thr);//wty

cvReleaseImage(&log1);

cvReleaseImage(&log2);

cvReleaseImage(&log);

cvReleaseImage(&pyr);

cvReleaseImage(&laplace1);

cvReleaseImage(&dst);

cvReleaseImage(&laplace);

}

void CCvmedianfilterDlg::OnLaplace()

{

// TODO: Add your control notification handler code here

IplImage *laplace=0,*laplace1=0,*dstlaplace=0;

laplace=cvLoadImage(filename,1);

laplace1=cvCreateImage(cvSize(laplace->width,laplace->height),IPL_DEPTH_8U,1);

dstlaplace=cvCreateImage(cvSize(laplace->width,laplace->height),IPL_DEPTH_16S,1);

cvCvtColor(laplace,laplace1, CV_BGR2GRAY);

cvLaplace(laplace1,dstlaplace,3);

//cvLaplace(laplace1,dstlaplace,5); //或

// cvLaplace(laplace1,dstlaplace,7); //或

cvNamedWindow("Laplace",1);

cvShowImage("Laplace",dstlaplace);

cvReleaseImage(&laplace1);

cvReleaseImage(&dstlaplace);

cvReleaseImage(&laplace);

}

void CCvmedianfilterDlg::OnLog()

{

// TODO: Add your control notification handler code here

IplImage *log=0,*pyr=0,*log1=0,*log2=0;

IplImage *laplace=0,*laplace1=0,*dst=0;

log=cvLoadImage(filename,1);

pyr=cvCreateImage(cvSize(log->width/2,log->height/2),8,3);

laplace=cvCreateImage(cvSize(log->width,log->height),8,3);

cvPyrDown(log,pyr,CV_GAUSSIAN_5x5 );

cvPyrUp(pyr,laplace,CV_GAUSSIAN_5x5 );// 高斯

laplace1=cvCreateImage(cvSize(log->width,log->height),IPL_DEPTH_8U,1);//laplace

dst=cvCreateImage(cvSize(log->width,log->height),IPL_DEPTH_16S,1);

cvCvtColor(laplace,laplace1, CV_BGR2GRAY);

cvLaplace(laplace1,dst,3);

//cvLaplace(laplace1,dstlaplace,5);

//cvLaplace(laplace1,dstlaplace,7);

cvNamedWindow("LOG算子(核=3)",1);

cvShowImage("LOG算子(核=3)",dst);

cvReleaseImage(&log1);

cvReleaseImage(&log2);

cvReleaseImage(&log);

cvReleaseImage(&pyr);

cvReleaseImage(&laplace1);

cvReleaseImage(&dst);

cvReleaseImage(&laplace);

}

void CCvmedianfilterDlg::OnTough()

{

// TODO: Add your control notification handler code here

char *wndname;

wndname="原图";

cvNamedWindow(wndname,1);

IplImage *ww = 0,*ww1=0,*dst=0,*dst1=0;

ww=cvLoadImage(filename,1);

cvShowImage(wndname,ww);

ww1=cvCreateImage(cvSize(ww->width,ww->height),IPL_DEPTH_8U,1);

dst=cvCreateImage(cvSize(ww->width,ww->height),IPL_DEPTH_8U,1);

dst1=cvCreateImage(cvSize(ww->width,ww->height),IPL_DEPTH_8U,3);

cvCvtColor(ww, dst, CV_BGR2GRAY);

CvMemStorage* storage = cvCreateMemStorage(0);

CvSeq* lines = 0;

int i;

cvCanny(dst,ww1, 50, 200, 3 );

cvCvtColor(ww1,dst1, CV_GRAY2BGR );

#if 1

lines = cvHoughLines2(ww1, storage,CV_HOUGH_STANDARD, 1, CV_PI/180,150,3,0 );

for( i = 0; i < lines->total; i++ )

{

float* line = (float*)cvGetSeqElem(lines,i);

float rho = line[0];

float theta = line[1];

CvPoint pt1, pt2;

double a = cos(theta), b = sin(theta);

if( fabs(a) < 0.001 )

{

pt1.x = pt2.x = cvRound(rho);

pt1.y = 0;

pt2.y = dst3->height;

}

else if( fabs(b) < 0.001 )

{

pt1.y = pt2.y = cvRound(rho);

pt1.x = 0;

pt2.x = dst3->width;

}

else

{

pt1.x = 0;

pt1.y = cvRound(rho/b);

pt2.x = cvRound(rho/a);

pt2.y = 0;

}

cvLine( dst1, pt1, pt2, CV_RGB(255,0,0), 3, 8 );

}

#else

lines = cvHoughLines2(ww1, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 20, 40, 20);

for( i = 0; i < lines->total; i++ )

{

CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);

cvLine( dst1, line[0], line[1], CV_RGB(255,0,0), 3, 8 );

}

#endif

cvNamedWindow( "原图", 1 );

cvShowImage( "原图", ww );

cvNamedWindow( "Hough检测", 1 );

cvShowImage( "Hough检测", dst1 );

cvWaitKey(0);

cvReleaseImage(&dst);

cvReleaseImage(&ww);

cvReleaseImage(&ww1);

cvReleaseImage(&dst1);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有