#python code
import cv2
import numpy as np
def noise_gaussian():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch07\\noise\\lenna.bmp", cv2.IMREAD_GRAYSCALE)
if src is None:
print("Image load failed!")
return
cv2.imshow("src", src)
for stddev in range(10, 31, 10):
noise = np.zeros(src.shape, np.int32)
cv2.randn(noise, 0, stddev)
dst = cv2.add(src, noise, dtype=cv2.CV_8U)
desc = "stddev = {}".format(stddev)
cv2.putText(dst, desc, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, 255, 1, cv2.LINE_AA)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()
def filter_bilateral():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch07\\noise\\lenna.bmp", cv2.IMREAD_GRAYSCALE)
if src is None:
print("Image load failed!")
return
noise = np.zeros(src.shape, np.int32)
cv2.randn(noise, 0, 5)
src = cv2.add(src, noise, dtype=cv2.CV_8U)
dst1 = cv2.GaussianBlur(src, (0, 0), 5)
dst2 = cv2.bilateralFilter(src, -1, 10, 5)
cv2.imshow("src", src)
cv2.imshow("dst1", dst1)
cv2.imshow("dst2", dst2)
cv2.waitKey()
cv2.destroyAllWindows()
def filter_median():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch07\\noise\\lenna.bmp", cv2.IMREAD_GRAYSCALE)
if src is None:
print("Image load failed!")
return
num = int(src.size * 0.1)
for i in range(num):
x = np.random.randint(0, src.shape[1])
y = np.random.randint(0, src.shape[0])
src[y, x] = (i % 2) * 255
dst1 = cv2.GaussianBlur(src, (0, 0), 1)
dst2 = cv2.medianBlur(src, 3)
cv2.imshow("src", src)
cv2.imshow("dst1", dst1)
cv2.imshow("dst2", dst2)
cv2.waitKey()
cv2.destroyAllWindows()
def main():
noise_gaussian()
filter_bilateral()
filter_median()
if __name__ == "__main__":
main()
// C++ code
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
void noise_gaussian();
void filter_bilateral();
void filter_median();
int main(void)
{
noise_gaussian();
filter_bilateral();
filter_median();
return 0;
}
void noise_gaussian()
{
Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
imshow("src", src);
for (int stddev = 10; stddev <= 30; stddev += 10) {
Mat noise(src.size(), CV_32SC1);
randn(noise, 0, stddev);
Mat dst;
add(src, noise, dst, Mat(), CV_8U);
String desc = format("stddev = %d", stddev);
putText(dst, desc, Point(10, 30), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255), 1, LINE_AA);
imshow("dst", dst);
waitKey();
}
destroyAllWindows();
}
void filter_bilateral()
{
Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
Mat noise(src.size(), CV_32SC1);
randn(noise, 0, 5);
add(src, noise, src, Mat(), CV_8U);
Mat dst1;
GaussianBlur(src, dst1, Size(), 5);
Mat dst2;
bilateralFilter(src, dst2, -1, 10, 5);
imshow("src", src);
imshow("dst1", dst1);
imshow("dst2", dst2);
waitKey();
destroyAllWindows();
}
void filter_median()
{
Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
int num = (int)(src.total() * 0.1);
for (int i = 0; i < num; i++) {
int x = rand() % src.cols;
int y = rand() % src.rows;
src.at<uchar>(y, x) = (i % 2) * 255;
}
Mat dst1;
GaussianBlur(src, dst1, Size(), 1);
Mat dst2;
medianBlur(src, dst2, 3);
imshow("src", src);
imshow("dst1", dst1);
imshow("dst2", dst2);
waitKey();
destroyAllWindows();
}
C++ Code 출처 : OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝 - 황선규 저




'OpenCV' 카테고리의 다른 글
ch08 affine (0) | 2024.05.20 |
---|---|
ch07 sharpen (0) | 2024.05.20 |
ch07 filter (0) | 2024.05.20 |
ch07 blurring (0) | 2024.05.20 |
ch06 logical (0) | 2024.05.20 |