Image Gradients
จาก Morange Wiki
วัตถุประสงค์
- ค้นหาภาพการไล่ระดับสี ฯลฯ
- เราจะได้เห็นการทำงานต่อไปนี้ cv2.Sobel () cv2.Scharr () cv2.Laplacian ()
ทฤษฎี
OpenCV มีสามประเภท ของ gradient filters หรือ High-pass filters, Sobel, Scharr, และ Laplacian เราจะเห็นแต่ละฟังก์ชัน
Sobel and Scharr Derivatives
ด้านล่างนี้แสดงให้เห็นรหัสดำเนินการทั้งหมดในแผนภาพเดียว เคอร์เนลทั้งหมดขนาด 5x5 ความลึกของภาพ -1 เพื่อให้ได้ผลในประเภท np.uint8
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('joy.jpg',0) laplacian = cv2.Laplacian(img,cv2.CV_64F) sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5) sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5) plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray') plt.title('Original'), plt.xticks([]), plt.yticks([]) plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray') plt.title('Laplacian'), plt.xticks([]), plt.yticks([]) plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray') plt.title('Sobel X'), plt.xticks([]), plt.yticks([]) plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray') plt.title('Sobel Y'), plt.xticks([]), plt.yticks([]) plt.show()
มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย
หนึ่งเรื่องสำคัญ!
ในตัวอย่างล่าสุดของเราประเภทข้อมูลการส่งออกเป็น cv2.CV_8U หรือ np.uint8 แต่มีปัญหาเล็กน้อยกับที่ สีดำต่อการเปลี่ยนแปลงสีขาวจะมาเป็น slope เชิงบวก (มีค่าบวก) ในขณะที่สีขาวไปดำเปลี่ยนแปลงเป็น slope เชิงลบ (มันจะมีค่าลบ) ดังนั้นเมื่อคุณแปลงข้อมูลไปยัง np.uint8 ทั้งหมด slope จะทำศูนย์
- หากคุณต้องการที่จะตรวจสอบขอบทั้งสองตัวเลือกที่ดีคือการให้ประเภทข้อมูลออกไปบางรูปแบบที่สูงขึ้นเช่น cv2.CV_16S, cv2.CV_64F ฯลฯ ใช้ค่าสัมบูรณ์และแล้วแปลงกลับไป
cv2.CV_8U ด้านล่างเป็น Code แสดงให้เห็นถึงขั้นตอนนี้สำหรับ Sobel filter and difference
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('box.png',0) # Output dtype = cv2.CV_8U sobelx8u = cv2.Sobel(img,cv2.CV_8U,1,0,ksize=5) #Output dtype = cv2.CV_64F จากนั้นให้นำที่สัมบูรณ์และแปลง cv2.CV_8U sobelx64f = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5) abs_sobel64f = np.absolute(sobelx64f) sobel_8u = np.uint8(abs_sobel64f) plt.subplot(1,3,1),plt.imshow(img,cmap = 'gray') plt.title('Original'), plt.xticks([]), plt.yticks([]) plt.subplot(1,3,2),plt.imshow(sobelx8u,cmap = 'gray') plt.title('Sobel CV_8U'), plt.xticks([]), plt.yticks([]) plt.subplot(1,3,3),plt.imshow(sobel_8u,cmap = 'gray') plt.title('Sobel abs(CV_64F)'), plt.xticks([]), plt.yticks([]) plt.show()
มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย