close
3 ways to use opencv to change an image from RGB to gray
上圖就是我們這次所要呈現的結果,教學開始:
第一種
這是我覺得最簡潔的方式,直接在 imread() 加入參數 0 就可以了,如下方程式碼:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat original = imread("Lenna.jpg");
Mat gray = imread("Lenna.jpg", 0);
//or Mat gray = imread("Lenna.jpg", IMREAD_GRAYSCALE);
imshow("original image", original);
imshow("gray image", gray);
waitKey();
}
相關參數可參考下方:
第二種
使用 cvtColor() 並搭配參數 COLOR_BGR2GRAY,如下方程式碼:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat original = imread("Lenna.jpg");
Mat gray;
cvtColor(original, gray, COLOR_BGR2GRAY); // convert to grayscale
imshow("original image", original);
imshow("gray image", gray);
waitKey();
}
第三種
使用 RGB to gray 的轉換公式自行去對每一個 pixel 去處理公式及程式碼如下:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat original = imread("Lenna.jpg");
Mat gray = Mat::zeros(original.rows, original.cols, CV_8UC1);
int rows = original.rows;
int cols = original.cols;
int channel = original.channels();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (channel == 3) {
//opencv 圖片的顏色順序為 B G R ,如下
int b = original.at<Vec3b>(i, j)[0];
int g = original.at<Vec3b>(i, j)[1];
int r = original.at<Vec3b>(i, j)[2];
gray.at<uchar>(i, j) = 0.299 * r + 0.587 * g + 0.114 * b;
}
}
}
imshow("original image", original);
imshow("gray image", gray);
waitKey();
}
如需更多客製化服務:
另外有安裝或者其他使用上的問題,皆可參考下列篇章:
如有任何問題歡迎下方留言討論!!!
文章標籤
全站熱搜
留言列表