OpenCV ภาพระดับสีเทา ภาพเบลอ และ ภาพแคนนี

ขั้นตอนการทํางาน


# แสดงรูปภาพ , วิดีโอ และ เว็บแคม


โดยศึกษา ขั้นตอนการทำงาน จากลิงค์บทความ ด้านล่าง



1 : OpenCV แสดงภาพระดับสีเทา


สำหรับการเบลอภาพโดยใช้เคอร์เนลหรือตัวกรองด้วยแนวคิดพื้นฐานของการแปลงสัญญาณตัวกรองความถี่ต่ำความถี่ของภาพ ฯลฯ โดยการแปลงเป็นภาพสเกลสีเทา

ภาพเกรย์สเกลหรือภาพระดับสีเทา คือภาพ ขาว-ดำ-เทา โดยจะมีระดับความเข้มจากการแปลงสีเท่าคือ 0–255 ( 8-bit )

  • ภาพเกรย์สเกลเกิดจากการแปลงภาพสี RGB มาเป็น Grayscale โดยใช้สูตรทางคณิตศาสตร์ Gray = 0.299R+0.587G+0.114*B
    Gray : ค่าความเข้มของสีเทา มีค่า 0–255

    R : มีค่า 0–255, G : มีค่า 0–255, B : มีค่า 0–255

cvtColor(img, imgGray, COLOR_BGR2GRAY);


เขียนโค้ดดังนี้

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {

	string path = "Resources/test.png";
	Mat img = imread(path);
	Mat imgGray;

	cvtColor(img, imgGray, COLOR_BGR2GRAY);

	imshow("Image Gray", imgGray);
	waitKey(0);
	return 0;
}


ผลลัพธ์การทำงาน

OpenCV ภาพระดับสีเทา


2 : OpenCV แสดงภาพเบลอ


เกาส์เซียนเบลอภาพด้วย OpenCV

OpenCV มีฟังก์ชั่นที่สร้างขึ้นในการดำเนินการ Blur Gaussian / Smoothing บนภาพได้อย่างง่ายดาย สิ่งที่คุณต้องระบุคือขนาดของเคอร์เนลเกาส์เซียนที่ภาพของคุณควรจะเชื่อมั่น นี่คือโปรแกรมง่าย ๆ ที่แสดงให้เห็นถึงวิธีการทำให้ภาพที่ราบรื่นด้วยเคอร์เนลเกาส์กับ OpenCV

GaussianBlur(img, imgBlur, Size(7, 7), 5, 0);


เขียนโค้ดดังนี้

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {

	string path = "Resources/test.png";
	Mat img = imread(path);
	Mat imgBlur;

	GaussianBlur(img, imgBlur, Size(7, 7), 5, 0);

	imshow("Image Blur", imgBlur);
	waitKey(0);
	return 0;
}


ผลลัพธ์การทำงาน

OpenCV แสดงภาพเบลอ


3 : OpenCV Image Canny


วิธีแคนนีเป็นหนึ่งในวิธีที่มีประสิทธิภาพสำหรับการหาขอบของรูปภาพ ประกอบด้วยการดำเนินการหลัก 4 ขั้นตอน คือ การปรับค่าสีโดยใช้ตัวกรองเกาส์เซียน การหาขนาดและทิศทางของการเปลี่ยนแปลงค่าสีของพิกเซล การพิจารณาขอบที่เป็นไปได้จากขนาดของการเปลี่ยนแปลงค่าสี และการใช้ค่าเกณฑ์สองระดับเพื่อกาหนดขอบเข้มและ ขอบไม่เข้ม

เขียนโค้ดดังนี้

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {

	string path = "Resources/test.png";
	Mat img = imread(path);
	Mat imgGray, imgBlur, imgCanny;

	cvtColor(img, imgGray, COLOR_BGR2GRAY);
	GaussianBlur(img, imgBlur, Size(3, 3), 3, 0);
	Canny(imgBlur, imgCanny, 25, 75);

	imshow("Image Canny", imgCanny);
	waitKey(0);
	return 0;
}


ผลลัพธ์การทำงาน


3 : OpenCV  Image Canny


4 : OpenCV Image Diration


Dilation คือ การขยายภาพเป็นลักษณะของการเพิ่มข้อมูลภาพตามลำดับตลอดทั้งภาพ โดยจะเป็นเพิ่มส่วนสีขาวหรือขนาดของวัตถุเบื้องหน้า (Foreground) ปกติในกรณีการลด Noise นั้นจะใช้ Erosion ขยายและลดภาพสีขาวลง และจะทำให้วัตถุหดตัวลงโดยวิธีนี้เหมาะสำหรับการเพิ่มจุดที่เสียหายไป

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {

	string path = "Resources/test.png";
	Mat img = imread(path);
	Mat imgGray, imgBlur, imgCanny, imgDil , imgErode;

	cvtColor(img, imgGray, COLOR_BGR2GRAY);
	GaussianBlur(img, imgBlur, Size(3, 3), 3, 0);
	Canny(imgBlur, imgCanny, 25, 75);

	Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
	dilate(imgCanny, imgDil, kernel);

	imshow("Image Diration", imgDil);
		
	waitKey(0);
	return 0;
}


ผลลัพธ์การทำงาน

OpenCV Image Diration


5 : OpenCV Image Erode


Erosion คือ การย่อภาพเป็นลักษณะของการลบข้อมูลภาพบริเวณขอบของภาพ โดยทั้งหมดที่อยู่ใกล้เคียงนั้นจะโดนลบออกไปตามขนาดของ kernel ดังนั้นความหนาหรือขนาดของวัตถุข้างหน้าจะลดลง(หรือพื้นที่ที่มีสีขาวก็จะลดลง) และสิ่งนั้นจะเป็นประโยชน์ด้านการลด noises ออก

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {

	string path = "Resources/test.png";
	Mat img = imread(path);
	Mat imgGray, imgBlur, imgCanny, imgDil , imgErode;

	cvtColor(img, imgGray, COLOR_BGR2GRAY);
	GaussianBlur(img, imgBlur, Size(3, 3), 3, 0);
	Canny(imgBlur, imgCanny, 25, 75);

	Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
	dilate(imgCanny, imgDil, kernel);
	erode(imgDil, imgErode, kernel);

	imshow("Image Erode", imgErode);
		
	waitKey(0);
	return 0;
}


ผลลัพธ์การทำงาน

OpenCV Image Erode