一、方框濾波
? ?方框濾波是均值濾波的一種形式,在均值濾波中,濾波結果的像素值是任意一個點的鄰域平均值,等于各鄰域像素值之和的均值,而在方框濾波中,可以自由選擇是否對均值濾波的結果進行歸一化,即可以自由選擇濾波結果是鄰域像素值之和的平均值,還是鄰域像素值之和,
二、C++代碼
#include <iostream>
#include <opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
//---------------------------用于方框濾波的影像--------------------
Mat img = imread("1.jpg");
if (img.empty())
{
cout << "請確認影像檔案名稱是否正確" << endl;
return -1;
}
//將CV_8U型別轉換成CV_32F型別,避免計算后的資料過大
Mat equalImg_32F;
img.convertTo(equalImg_32F, CV_32F, 1.0 / 255);
Mat resultNorm, result, equalImg_32FSqr;
//--------------------------方框濾波boxFilter----------------------
boxFilter(img, resultNorm, -1, Size(3, 3), Point(-1, -1), true); // 進行歸一化,則為均值濾波
boxFilter(img, result, -1, Size(3, 3), Point(-1, -1), false); // 不進行歸一化
//----------------------方框濾波sqrBoxFilter()---------------------
//對每個像素數值的平方求和/求均值
sqrBoxFilter(equalImg_32F, equalImg_32FSqr, -1, Size(3, 3), Point(-1, -1), true, BORDER_CONSTANT);
//-------------------------顯示處理結果----------------------------
imshow("原始影像", img);
imshow("歸一化", resultNorm);
imshow("不歸一化", result);
imshow("平方和求均值", equalImg_32FSqr);
waitKey(0);
return 0;
}
三、python代碼
import cv2
import matplotlib.pyplot as plt
# 讀取圖片
img = cv2.imread('1.jpg')
# BGR轉為RGB,方便plot函式顯示
source = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 方框濾波,True表示歸一化,則效果與均值濾波相同,
result = cv2.boxFilter(source, -1, (5, 5), normalize=False)
# sqrBoxFilter實作對每個像素值的平方求和
# result1 = cv2.sqrBoxFilter(source, -1, (5, 5), normalize=True)
# 顯示圖形
titles = ['Source Image', 'BoxFilter Image']
images = [source, result]
for i in range(2):
plt.subplot(1, 2, i + 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
四、結果展示
1、原始影像

2、歸一化

3、不歸一化

4、平方和求均值

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317722.html
標籤:其他
