问题描述
- 在Qt中图像的拉普拉斯变换,一运行程序就崩溃了,下面是代码,求大神看一下。
-
void MainWindow::LT()
{
QImage *SobelImage=new QImage(img->width(), img->height(),QImage::Format_ARGB32);
int width=img->width(),height=img->height();
int pixelNum=width*height;
int i,j,k,l;
float rResult,gResult,bResult;
float laplace[9]={0,-1,0,-1,5,-1,0,-1,0};
QRgb pixelOld[pixelNum],pixelTemp1[pixelNum];
int rtmp,gtmp,btmp;
memset(pixelTemp1,0,pixelNum);
QRgb tmpRgb;
for(j=0;j
{
for(i=0;i
{
tmpRgb=img->pixel(i,j);
pixelOld[j*width+i]=tmpRgb;
}
}
for(j=1;j
{
for(i=1;i
{
rResult=0;
gResult=0;
bResult=0;
for(k=0;k
{
for(l=0;l
{
rResult+=qRed(pixelOld[(j-1+k)*width+(i-1+l)])*laplace[k*3+l];
gResult+=qGreen(pixelOld[(j-1+k)*width+(i-1+l)])*laplace[k*3+l];
bResult+=qBlue(pixelOld[(j-1+k)*width+(i-1+l)])*laplace[k*3+l];
}
}
rResult=(float)fabs(rResult);
gResult=(float)fabs(gResult);
bResult=(float)fabs(bResult);
if(rResult>255)
{
rtmp=255;
}
else
rtmp=(int)(rResult+0.5);
if(gResult>255)
gtmp=255;
else
gtmp=(int)(gResult+0.5);
if(bResult>255)
btmp=255;
else
btmp=(int)(bResult+0.5);
// pixelTemp1[j*width+i]=qRgb(rtmp,gtmp,btmp);
}
}
for(j=0;j
{
for(i=0;i
{
SobelImage->setPixel(i,j,qRgb(rtmp,gtmp,btmp));
}
}label->setPixmap(QPixmap::fromImage(*SobelImage));
// delete img;
// delete[] pixelTemp1;}
解决方案
图像处理不是很了解,C语言略知一二,在编程中一运行程序就崩溃很可能那个地方除以0溢出了。
解决方案二:
单步调试定位崩溃语句。检查下img会不会是NULL,图像格式是不是QImage::Format_ARGB32。
解决方案三:
qDebug()一下指针是否为NULL,数组访问有没有越界。
时间: 2024-12-12 04:04:09