OpenCV學習方框濾波實現圖像處理代碼示例

一、方框濾波

   方框濾波是均值濾波的一種形式。在均值濾波中,濾波結果的像素值是任意一個點的鄰域平均值,等於各鄰域像素值之和的均值,而在方框濾波中,可以自由選擇是否對均值濾波的結果進行歸一化,即可以自由選擇濾波結果是鄰域像素值之和的平均值,還是鄰域像素值之和。

二、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、平方和求均值

在這裡插入圖片描述

以上就是OpenCV學習方框濾波實現圖像處理代碼示例的詳細內容,更多關於OpenCV方框濾波實現圖像處理的資料請關註WalkonNet其它相關文章!

推薦閱讀: