#python
import cv2
import numpy as np
def sobel_derivative():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch09\\edges\\lenna.bmp", cv2.IMREAD_GRAYSCALE)
if src is None:
print("Image load failed!")
return
mx = np.float32([[-1/2.0, 0, 1/2.0]])
my = np.float32([[-1/2.0], [0], [1/2.0]])
dx = cv2.filter2D(src, -1, mx, delta=128)
dy = cv2.filter2D(src, -1, my, delta=128)
cv2.imshow("src", src)
cv2.imshow("dx", dx)
cv2.imshow("dy", dy)
cv2.waitKey(0)
cv2.destroyAllWindows()
def sobel_edge():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch09\\edges\\lenna.bmp", cv2.IMREAD_GRAYSCALE)
if src is None:
print("Image load failed!")
return
dx = cv2.Sobel(src, cv2.CV_32F, 1, 0)
dy = cv2.Sobel(src, cv2.CV_32F, 0, 1)
fmag = np.sqrt(dx**2 + dy**2)
mag = np.clip(fmag, 0, 255).astype(np.uint8)
edge = np.uint8((mag > 150)*255)
cv2.imshow("src", src)
cv2.imshow("mag", mag)
cv2.imshow("edge", edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
def canny_edge():
src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch09\\edges\\lenna.bmp", cv2.IMREAD_GRAYSCALE)
if src is None:
print("Image load failed!")
return
dst1 = cv2.Canny(src, 50, 100)
dst2 = cv2.Canny(src, 50, 150)
cv2.imshow("src", src)
cv2.imshow("dst1", dst1)
cv2.imshow("dst2", dst2)
cv2.waitKey(0)
cv2.destroyAllWindows()
def main():
sobel_derivative()
sobel_edge()
canny_edge()
if __name__ == "__main__":
main()
// C++
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
void sobel_derivative();
void sobel_edge();
void canny_edge();
int main(void)
{
sobel_derivative();
sobel_edge();
canny_edge();
return 0;
}
void sobel_derivative()
{
Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
Mat mx = Mat_<float>({ 1, 3 }, { -1 / 2.f, 0, 1 / 2.f });
Mat my = Mat_<float>({ 3, 1 }, { -1 / 2.f, 0, 1 / 2.f });
Mat dx, dy;
filter2D(src, dx, -1, mx, Point(-1, -1), 128);
filter2D(src, dy, -1, my, Point(-1, -1), 128);
imshow("src", src);
imshow("dx", dx);
imshow("dy", dy);
waitKey();
destroyAllWindows();
}
void sobel_edge()
{
Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
Mat dx, dy;
Sobel(src, dx, CV_32FC1, 1, 0);
Sobel(src, dy, CV_32FC1, 0, 1);
Mat fmag, mag;
magnitude(dx, dy, fmag);
fmag.convertTo(mag, CV_8UC1);
Mat edge = mag > 150;
imshow("src", src);
imshow("mag", mag);
imshow("edge", edge);
waitKey();
destroyAllWindows();
}
void canny_edge()
{
Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
Mat dst1, dst2;
Canny(src, dst1, 50, 100);
Canny(src, dst2, 50, 150);
imshow("src", src);
imshow("dst1", dst1);
imshow("dst2", dst2);
waitKey();
destroyAllWindows();
}
C++ Code 출처 : OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝 - 황선규 저
'OpenCV' 카테고리의 다른 글
ch10 backproj (0) | 2024.05.21 |
---|---|
ch09 hough (0) | 2024.05.20 |
ch08 perspective (0) | 2024.05.20 |
ch08 affine (0) | 2024.05.20 |
ch07 sharpen (0) | 2024.05.20 |