前に書く
次のコードはすべてオンラインの抜粋です。完全なコードが必要な場合は、非公開です!
hw1
hw1:
1.画像のサイズ
変更最初に画像のメモリサイズを変更します。例:
X:4 * 4からY:7 * 7へ
2点間の座標変換関係を計算し
ます。aX+ b = Y、a = 4/7、b = -3/14を求めます
補間法:
1)最近傍要素法
は、決定されるべきピクセルに最も近い隣接ピクセルのグレーレベルを決定されるべきピクセルに割り当てることである。
2)三角補間
Q = V1 A1 + V2 A2 + V3 * A3
3)2ライン補間法
ピクセルをループして古い座標にマップし
ます。最近傍内挿を使用して画像を塗りつぶします
2.
CSDNで動画の説明を見つける:
インターネット上のコード(c ++)
//******************高斯卷积核生成函数*************************
void GetGaussianKernel(double **gaus, const int size,const double sigma)
{
const double PI=4.0*atan(1.0); //圆周率π赋值
int center=size/2;
double sum=0;
for(int i=0;i<size;i++)
{
for(int j=0;j<size;j++)
{
gaus[i][j]=(1/(2*PI*sigma*sigma))*exp(-((i-center)*(i-center)+(j-center)*(j-center))/(2*sigma*sigma));
sum+=gaus[i][j];
}
}
for(int i=0;i<size;i++)
{
for(int j=0;j<size;j++)
{
gaus[i][j]/=sum;
cout<<gaus[i][j]<<" ";
}
cout<<endl<<endl;
}
return ;
}
3.混合画像(ガウス畳み込み)
ガウスフィルターはローパスフィルターであり
、元の画像からガウスフィルター処理された画像を差し引くことで、ハイパスフィルター処理された画像を取得できます。
4. Sobelフィルター
原則:最初にフィルターを作成し、次に正規化する
ネチズンのコード:
#竖直方向[1 2 1 水平方向[1 0 -1
# 0 0 0 2 0 -2
# -1 -2 -1 1 0 -1]
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst = np.zeros((height,width,1),np.uint8)
for i in range(0,height-2):
for j in range(0,width-2):
gy = gray[i,j]+2*gray[i,j+1]+gray[i,j+2]-(gray[i+2,j]+gray[i+2,j+1]+gray[i+2,j+2])
gx = gray[i,j]+2*gray[i+1,j]+gray[i+2,j]-(gray[i,j+2]+gray[i+1,j+2]+gray[i+2,j+2])
grad = math.sqrt(gx*gx+gy*gy) #求梯度大小
if grad>=100:
dst[i,j] = 255
else:
dst[i,j] = 0
Mat sobel(Mat src,Mat dst)
{
int y, x;
int w = src.cols;
int h = src.rows;
int gx = 0, gy = 0;
for (y = 1; y < h - 1; y++)
{
for (x = 1; x < w - 1; x++)
{
gx=src.at<uchar>(y-1,x+1)+src.at<uchar>(y,x+1)*2+src.at<uchar>(y+1,x+1)-src.at<uchar>(y-1,x-1)-src.at<uchar>(y,x-1)*2-src.at<uchar>(y+1,x-1);
gy=src.at<uchar>(y-1,x-1)+src.at<uchar>(y-1,x)*2+src.at<uchar>(y-1,x+1)-src.at<uchar>(y+1,x-1)-src.at<uchar>(y+1,x)*2-src.at<uchar>(y+1,x+1);
dst.at<uchar>(y,x)= abs(gx)+abs(gy) ;
}
}
}