您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關C++如何實現OpenCV方框濾波效果,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
? ?方框濾波是均值濾波的一種形式。在均值濾波中,濾波結果的像素值是任意一個點的鄰域平均值,等于各鄰域像素值之和的均值,而在方框濾波中,可以自由選擇是否對均值濾波的結果進行歸一化,即可以自由選擇濾波結果是鄰域像素值之和的平均值,還是鄰域像素值之和。
#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; }
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、平方和求均值
關于“C++如何實現OpenCV方框濾波效果”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。