线检测

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include <memory.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int GetPixel(int i, int j,IplImage *pImage,int rgb)
{
return (int)((uchar*)(pImage->imageData+j*pImage->widthStep))[rgb*i];
//pImage->imageData是指这个图像的首地址,pImage->widthStep是每个图像所占用的字节数
}

void SetPixel(int i, int j,IplImage *pImage,float vaule,int rgb)
{
((uchar*)(pImage->imageData+j*pImage->widthStep))[rgb*i] = vaule;
}
void detection(IplImage *pImage,IplImage *afterImage)
{
float horiza[9] = {2,-1,-1,-1,2,-1,-1,-1,2};
CvMat horizaMat;
horizaMat = cvMat(3,3,CV_32F,horiza);
cvFilter2D(pImage, afterImage, &horizaMat, cvPoint(-1,-1));
}
int multify(int num[])
{
int i;
float value = 0;
float horiza[9] = {2,-1,-1,-1,2,-1,-1,-1,2};
for(i=0;i<9;i++)
{
value = num[i] * horiza[i] + value;

}
if(value < 0)
value = 0;
return value;
}
int Filter2D (IplImage *pImage,IplImage *afterImage)
{
int i,j,k,sum;
for(i = 1;i<pImage->width-1;i++)
{
for(j = 1;j<pImage->height-1;j++)
{
for(k =1;k<=1;k++)
{

int num[9] = {GetPixel(i-1,j-1,pImage,k),GetPixel(i-1,j,pImage,k),GetPixel(i-1,j+1,pImage,k) ,GetPixel(i,j-1,pImage,k) ,
GetPixel(i,j,pImage,k) ,GetPixel(i,j+1,pImage,k) ,GetPixel(i+1,j-1,pImage,k),GetPixel(i+1,j,pImage,k) ,GetPixel(i+1,j+1,pImage,k)};
sum = multify(num);
SetPixel(i,j,afterImage,sum,k);
}
}
}
return 0;
}

int main(int argc, char* argv[])
{
const char* imagepath = "2.jpg";
IplImage *pImage;
pImage=cvLoadImage(imagepath,0);
IplImage *afterImage= cvCloneImage(pImage);
cvNamedWindow("AtBegining");
cvShowImage( "AtBegining", pImage);

Filter2D(pImage,afterImage);

cvNamedWindow("AfterChanged");
cvShowImage( "AfterChanged", afterImage);
cvWaitKey();
cvReleaseImage(&pImage);
cvDestroyWindow("AtBegining");
cvDestroyWindow("AfterChanged");

return 0;
}

猜你喜欢

转载自blog.csdn.net/u012451520/article/details/50358936