테두리 검출 - Sobel 연산 자
// Sobel.cpp : 。
//
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "math.h"
#include "stdio.h"
#include "malloc.h"
IplImage *image; // IplImage
int height,width;
CvScalar sclr;
int sobel_y[9]={1,2,1,0,0,0,-1,-2,-1}; //y sobel
int sobel_x[9]={1,0,-1,2,0,-2,1,0,-1}; //x sobel
// BGR
inline void cv3DoubleMatPrint( const CvMat* mat )
{
int i, j;
for( i = 0; i < mat->rows; i++ )
{
for( j = 0; j < mat->cols; j++ )
{
CvScalar scal = cvGet2D( mat, i, j );
printf( "(%f,%f,%f) ", scal.val[0], scal.val[1], scal.val[2] );
}
printf( "
" );
}
}
//Sobel
void sobel()
{
int i,j,k;
int gray_x=0, gray_y=0, gray;
int *data;
int temp[9];
data = (int *)malloc(height*width*sizeof(int));//
for(i=0;i<height;i++) //
{
for(j=0;j<width;j++)
{
sclr=cvGet2D(image,i,j);
gray=(int)sclr.val[0];
data[i*width+j]=gray;
}
}
for(i=1;i<height-1;i++)
{
for(j=1;j<width-1;j++)
{
gray_x=0;
gray_y=0;
sclr=cvGet2D(image,i,j);
temp[0]=data[width*(i-1)+j-1];
temp[1]=data[width*(i-1)+j];
temp[2]=data[width*(i-1)+j+1];
temp[3]=data[width*i+j-1];
temp[4]=data[width*i+j];
temp[5]=data[width*i+j+1];
temp[6]=data[width*(i+1)+j-1];
temp[7]=data[width*(i+1)+j];
temp[8]=data[width*(i+1)+j+1];
for(k=0;k<9;k++)
gray_y+=temp[k]*sobel_y[k];
for(k=0;k<9;k++)
gray_x+=temp[k]*sobel_x[k];
//sclr.val[0]=(gray_x+gray_y);//
//=======================================//
//
sclr.val[0]= abs(gray_x) + abs(gray_y);
// , ,
if (sclr.val[0]<200)
sclr.val[0] = 0;
else
sclr.val[0] = 255;
//=======================================//
cvSet2D(image,i,j,sclr);
}
}
free(data);
}
int main( int argc, char** argv )
{
IplImage* img = cvLoadImage("test.jpg");
cvNamedWindow( "img" ); //
cvShowImage( "img", img ); //
image = cvLoadImage( "test.jpg", 0);
height=image->height;
width=image->width;
sobel();
//cvWaitKey(0);
//===========================================//
//mat = cvGetMat( image, &cvmat );
//cv3DoubleMatPrint( mat );
//===========================================//
cvNamedWindow( "Image", 1 ); //
cvShowImage( "Image", image ); //
cvWaitKey(0); //
cvDestroyWindow( "Image" ); //
cvReleaseImage( &image ); //
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python 버 전의 cairo 모듈 설치: PycairoWindows 에 cairo 를 어떻게 설치 하 는 지, 특히 for python 을 어떻게 설치 하 는 지. 대응 하 는 Pycairo 를 찾 았 는데 보 니 아까 홈 페이지 에 있 던 것 같 습 니 다. 그리고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.