如何調用此函數static inline
函數?調用靜態內聯函數
static inline int xGradient(uchar* image, int x, int y)
{
return ((int)(image[y-1, x-1])) +
2*image[y, x-1] +
image[y+1, x-1] -
image[y-1, x+1] -
2*image[y, x+1] -
image[y+1, x+1];
}
static inline int yGradient(uchar* image, int x, int y)
{
return ((int)(image[y-1, x-1])) +
2*image[y-1, x] +
image[y-1, x+1] -
image[y+1, x-1] -
2*image[y+1, x] -
image[y+1, x+1];
我在調用函數時遇到麻煩。我這樣稱呼它:
gx = xGradient(&data[ii], x,y);
gy = yGradient(&data[ii], x,y);
sum = abs(gx) + abs(gy);
sum = sum > 255 ? 255:sum;
sum = sum < 0 ? 0 : sum;
我沒有得到gx和gy的結果。幫我在上面的程序中計算gx
和gy
。
這是我的代碼
#include<iostream>
#include<omp.h>
#include<ctime>
#include<cmath>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
static inline int xGradient(uchar* image, int x, int y)
{
return ((int)(image[y-1, x-1])) +
2*image[y, x-1] +
image[y+1, x-1] -
image[y-1, x+1] -
2*image[y, x+1] -
image[y+1, x+1];
}
static inline int yGradient(uchar* image, int x, int y)
{
return ((int)(image[y-1, x-1])) +
2*image[y-1, x] +
image[y-1, x+1] -
image[y+1, x-1] -
2*image[y+1, x] -
image[y+1, x+1];
}
int main()
{
Mat src, grey, grey2, dst;
clock_t start, finish;
int gx, gy, sum;
size_t total;
int sizes[2];
start = clock();
src= imread("E:/sobel/Debug/view_sea.bmp");
imwrite("E:/sobel/Debug/Serial/Citra Asli.bmp", src);
cvtColor(src,grey,CV_BGR2GRAY);
imwrite("E:/sobel/Debug/Serial/Grayscale.bmp", grey);
dst = grey.clone();
if(!grey.data)
{
return -1;
}
total=grey.total();
cv::Size s = grey.size();
sizes[0] = s.height;
sizes[1] = s.width;
cout << "citra terdiri dari " << total << " piksel dengan ukuran " << sizes[0] << " x " << sizes[1] << " piksel" << endl;
int starty=(grey.rows);
if(starty==0)
{starty=1;}
int stopy=(grey.rows);
if(stopy>grey.rows - 1)
{stopy=grey.rows - 1;}
int ii=grey.cols;
uchar* data=grey.data;
for(int y = starty; y < stopy; y++)
{
ii++;
for(int x = 1; x < sizes[1] - 1; x++)
{
gx = xGradient(&data[ii], x,y);
gy = yGradient(&data[ii], x,y);
sum = abs(gx) + abs(gy);
sum = sum > 255 ? 255:sum;
sum = sum < 0 ? 0 : sum;
data[ii] = sum;
ii++;
}
ii++;
}
finish = clock();
imwrite("E:/sobel/Debug/Serial/Output sobel dengan Serial.bmp", src);
cout << "Waktu Eksekusi Deteksi Tepi Serial adalah : " << float(finish- start)/CLOCKS_PER_SEC << " detik" << endl;
return 0;
}
我在此代碼
int ii=grey.cols;
uchar* data=grey.data;
for(int y = starty; y < stopy; y++)
{
ii++;
for(int x = 1; x < sizes[1] - 1; x++)
{
gx = xGradient(&data[ii], x,y);
gy = yGradient(&data[ii], x,y);
sum = abs(gx) + abs(gy);
sum = sum > 255 ? 255:sum;
sum = sum < 0 ? 0 : sum;
data[ii] = sum;
ii++;
}
ii++;
}
定義「不要gx和gy的結果「是否不打印? T'或者你獲得了你沒有想到的價值?另外'inline'不會改變程序的行爲,它只是一個優化的東西(你的編譯器可以選擇忽略) – olevegard
當你說你「沒有得到gx和gy的結果」時,你是什麼意思?像不是你期望的結果?你能否編輯這個問題來展示你的期望,以及你實際得到了什麼?什麼是'數據'?什麼是'ii'?什麼是'x'和'y'?什麼是聲明*和*所有這些變量的值?另外,您是否嘗試在調試器中逐步查看代碼,以瞭解它的真實含義? –
令人驚歎,它甚至編譯,給出圖像[y-1,x] bs。 – berak