溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++如何實(shí)現(xiàn)OpenCV方框?yàn)V波效果

發(fā)布時(shí)間:2022-03-03 15:01:01 來源:億速云 閱讀:132 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)C++如何實(shí)現(xiàn)OpenCV方框?yàn)V波效果,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

一、方框?yàn)V波

? ?方框?yàn)V波是均值濾波的一種形式。在均值濾波中,濾波結(jié)果的像素值是任意一個(gè)點(diǎn)的鄰域平均值,等于各鄰域像素值之和的均值,而在方框?yàn)V波中,可以自由選擇是否對(duì)均值濾波的結(jié)果進(jìn)行歸一化,即可以自由選擇濾波結(jié)果是鄰域像素值之和的平均值,還是鄰域像素值之和。

二、C++代碼

#include <iostream>
#include <opencv2\opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
	//---------------------------用于方框?yàn)V波的圖像--------------------
	Mat img = imread("1.jpg"); 
	if (img.empty())
	{
		cout << "請(qǐng)確認(rèn)圖像文件名稱是否正確" << endl;
		return -1;
	}
	
	//將CV_8U類型轉(zhuǎn)換成CV_32F類型,避免計(jì)算后的數(shù)據(jù)過大
	Mat equalImg_32F;
	img.convertTo(equalImg_32F, CV_32F, 1.0 / 255);
	Mat resultNorm, result, equalImg_32FSqr;
	//--------------------------方框?yàn)V波boxFilter----------------------
	boxFilter(img, resultNorm, -1, Size(3, 3), Point(-1, -1), true);  // 進(jìn)行歸一化,則為均值濾波
	boxFilter(img, result, -1, Size(3, 3), Point(-1, -1), false);     // 不進(jìn)行歸一化
	//----------------------方框?yàn)V波sqrBoxFilter()---------------------
	//對(duì)每個(gè)像素?cái)?shù)值的平方求和/求均值
	sqrBoxFilter(equalImg_32F, equalImg_32FSqr, -1, Size(3, 3), Point(-1, -1), true, BORDER_CONSTANT);
	//-------------------------顯示處理結(jié)果----------------------------
	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轉(zhuǎn)為RGB,方便plot函數(shù)顯示
source = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 方框?yàn)V波,True表示歸一化,則效果與均值濾波相同。
result = cv2.boxFilter(source, -1, (5, 5), normalize=False)
# sqrBoxFilter實(shí)現(xiàn)對(duì)每個(gè)像素值的平方求和
# 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()

四、結(jié)果展示

1、原始圖像

C++如何實(shí)現(xiàn)OpenCV方框?yàn)V波效果

2、歸一化

C++如何實(shí)現(xiàn)OpenCV方框?yàn)V波效果

3、不歸一化

C++如何實(shí)現(xiàn)OpenCV方框?yàn)V波效果

4、平方和求均值

C++如何實(shí)現(xiàn)OpenCV方框?yàn)V波效果

關(guān)于“C++如何實(shí)現(xiàn)OpenCV方框?yàn)V波效果”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI