Skip to content

Instantly share code, notes, and snippets.

@liewsi
Created March 8, 2013 12:23
Show Gist options
  • Save liewsi/5116120 to your computer and use it in GitHub Desktop.
Save liewsi/5116120 to your computer and use it in GitHub Desktop.
Erguvan Yeniden!
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
void erguvan(cv::Mat& resim) {
// Renk uzayını HSV'ye dönüştürelim.
cv::cvtColor(resim, resim, CV_BGR2HSV);
// Renkli resmi kanallara ayıralım: Hue (renk tonu),
// Saturation (doygunluk), Value (aydınlık).
std::vector kanallar;
cv::split(resim, kanallar);
// Maskeyi oluşturalım
// Renk tonu (ilk kanal) 0-180 derecelik bir açı içinde olacak. 0-360 derece
// arasında düşünürken 300-340 arası erguvan rengiydi, dolayısıyla burada tam
// yarısı olacak. Resimler için aşırıyüklü (overloaded) mantıksal işlemleri
// kullanarak tek satırda bu işi halledebildik.
cv::Mat maske = (kanallar[0] < 150) | (kanallar[0] > 170);
// Maske, erguvan dışında renge sahip olan pikseller için doğru (true),
// diğerleri için yanlış (false) oldu. Maskenin doğru olduğu yerlerin
// doygunluğunu 0'a çektik, yani bu pikselleri siyah-beyaz yaptık.
kanallar[1].setTo(cv::Scalar(0), maske);
// Kanalları geri birleştirelim ve resmi özgün uzayına geri çevirelim.
cv::merge(kanallar,resim);
cv::cvtColor(resim, resim, CV_HSV2BGR);
}
void main() {
// Resmi okuyalım.
cv::Mat resim = cv::imread("erguvan.jpg");
// Ekrana çizdirelim.
cv::namedWindow("Resim");
cv::imshow("Resim", resim);
// Erguvan dışındaki renkleri söndürelim.
erguvan(resim);
// Güncel resmi ekrana çizelim.
cv::namedWindow("Resim 2");
cv::imshow("Resim 2", resim);
// Sonucu kaydedelim.
cv::imwrite("erguvan2.jpg", resim);
cv::waitKey();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment