Langsung ke konten utama

OpenCV Tutorial - Membuat Efek Negative

OpenCV merupakan suatu library yang menyediakan banyak fitur-fitur menarik. Salah satunya adalah membuat efek negative pada citra. Namun pada postingan ini, saya tidak akan menjelaskan cara melakukannya menggunakan library OpenCV secara langsung, saya akan membagi cara bagaimana melakukannya secara MANUAL. Ini sih sebenarnya tuntutan kuliah, hehe ;)

Negative Image
Negative Image




Berikut ini adalah kodingannya

#include 
#include 
#include 

using namespace std;
using namespace cv;


int main(int argc, char** argv)
{

    CvMat *cvMat = cvLoadImageM("cameraman.jpg", CV_LOAD_IMAGE_GRAYSCALE);
    for (int i = 0;i< cvMat->rows; i++)
    {
        for (int j=0;j<cvmat->cols;j++)
        {
            cvSetReal2D(cvMat, i, j, (255-cvGetReal2D(cvMat, i, j)));
        }
    }
    cvShowImage("Hasil", cvMat);
    cvWaitKey(0);
    cvReleaseMat(&cvMat);
    return 0;
}

Ok, sekarang akan saya jelaskan maksud dari pemrograman diatas apa.

Hal pertama yang kita lakukan adalah me-load citra yang kita inginkan dalam bentuk grayscale. Tapi yang kita load adalah matriks citra tersebut. Kenapa begitu? Karena apabila kita ingin memberikan efek negative pada suatu citra secara manual, kita harus bisa memanipulasi pixels-pixels-nya secara langsung.

Kemudian pada looping itu kita telusuri satu per satu pixels dari citra yang kita load tadi dan langsung kita manipulasikan pixels-pixels-nya.

Contoh Negative Image + Rumus
Contoh Negative Image + Rumus

Gambar diatas merupakan contoh Negative Image beserta rumusnya. Intinya, nilai maksimal dari suatu pixel grayscale (255) dikurangi dengan nilai pixel citra yang asli. Ada juga yang menggunakan 127 sebagai operand pertama, tapi saya menggunakan 255. Untuk kasus gambar RGB tidak saya jelaskan di sini.

Nah, itulah yang sebenarnya dilakukan program di dalam loop. dia mengambil nilai pixel yang ada pada baris i, kolom j dari gambar asli dan menguranginya dengan nilai 255

(255-cvGetReal2D(cvMat, i, j))

Setelah itu, nilai yang diperoleh akan dimasukkan pada matriks gambar original kita tadi pada koordinat yang sama.

cvSetReal2D(cvMat, i, j, (255-cvGetReal2D(cvMat, i, j))); 

Kalau misalnya bingung, ini saya kasih program yang sama tapi menggunakan dua matriks, satu untuk input, satu lagi untuk hasil. Saya rasa ini sudah jelas jadi tidak perlu saya jelaskan lagi ya. :)

#include 
#include 
#include 

using namespace std;
using namespace cv;


int main(int argc, char** argv)
{

    CvMat *cvMat = cvLoadImageM("cameraman.jpg", CV_LOAD_IMAGE_GRAYSCALE);
    CvMat *out = cvCreateMat(cvMat->rows, cvMat -> cols, cvMat->type );
    for (int i = 0;i< cvMat->rows; i++)
    {
        for (int j=0;j<cvmat->cols;j++)
        {
            cvSetReal2D(out, i, j, (255-cvGetReal2D(cvMat, i, j)));
        }
    }
    cvShowImage("Hasil", out);
    cvWaitKey(0);
    cvReleaseMat(&cvMat);
    cvReleaseMat(&out);
    return 0;
}


Pada baris kedua, yang kita lakukan adalah membuat matrix dengan jumlah baris dan kolom dan tipe yang sama dengan citra original. Saya yakin ini sudah jelas kenapa :)

Semoga bermanfaat ya tutorial OpenCV saya ini. :)

Komentar

Posting Komentar

Postingan populer dari blog ini

Mengubah Repository Linux Menjadi Repository Lokal

Hlo teman-teman, pengen nge-share lagi nihh.. Baru-baru ini saya menginstall Deepin Linux, karena melihat UI cantiknya, dan saya juga mulai tertarik ke yang berbasis open source. Instalasi OS ini sangat mudah dan tidak make yang ribet-ribet. Hsilnya juga cantik kok.

PHP Tutorial - Menjalankan Program .exe "Hello World!" Melalui PHP

Hai semua, saya ingin berbagi ilmu yang saya dapatkan sambil mengerjakan skripsi saya. Pernah tidak, kalian sudah bikin suatu program keren menggunakan bahasa C/C++, tapi kalian harus menjalankannya di SERVER??? Contoh kasus yang membuat Anda melakukan ini apa? Contoh sederhananya membuat Web Service. Di mana operasi perhitungan service yang ditawarkan menggunakan bahasa C/C++. Kalau misal kalian mau bikin make PHP dari awal web servicenya, sebenarnya tidak apa-apa juga, tapi kalau misalkan sudah ada program C/C++-nya, mending make yang sudah ada daripada buat dari awal lagi kan??? :)

Inkscape tutorial - Pembuatan Bola Biliar yang Tampak 3D

Salah satu dari aspek design yang sangat populer sekarang ini adalah pembuatan gambar 3D. Lebih dari satu teknik dapat digunakan untuk membuat gambar 3D. Bahkan gambar 2D bisa dibuat terlihat 3D. Di sini saya akan menunjukkan bagaimana membuat bola biliar tapi yang tampak tiga dimensi menggunakan Inkscape. Ini adalah materi yang saya pelajari dan kopas dari sini . Langkah-langkahnya adalah sebagai berikut: - Buat sebuah lingkaran dengan memilih circle tool. Agar lingkarannya tidak asal, buatlah sambil menekan Ctrl. - Hilangkan stroke-nya dengan klik kanan pada warna stroke di bagian bawah, kemudian pilih Remove Stroke. - Ganti warna lingkaran tersebut dengan warna dasar bola yang kalian inginkan. Di sini saya menggunakan warna coklat tua. - Pilih gradient tool (Ctrl+F1), dan pastikan kalian memilih tombol gradasi radialnya pada bagian atas jendela kalian setelah kalian memilih gradient tool. - Pastikan lingkaran bawah yang terpilih setelah kalian melakukan gr...