دریافت رنگ یک پیکسل در OpenCV - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

دریافت رنگ یک پیکسل در OpenCV

0 امتیاز
سلام عزیزان.سایت خیلی خوب و فعالی دارید میخواستم بدونم چطوری میشه مقدار رنگ(RGB)یک پیکسل رو مثلا در موقعیت (x,y)بدست اورد. میخوام یه برنامه ای بنویسم که یک رنگ خاص رو در تصویر(یا وب کم)پیداکنه ومختصات اون ناحیه رو برگردونه
سوال شده بهمن 6, 1392  بوسیله ی reza.avoor (امتیاز 82)   8 12 20
دوباره تگ گذاری شد بهمن 22, 1392 بوسیله ی BlueBlade

2 پاسخ

+3 امتیاز
 
بهترین پاسخ

سلام.

اگر قصد دارید دسترسی تصادفی داشته باشید به صورت زیر:

Mat a ;
    for (int i=0; i < a.rows;i++)
        for (int j=0; j < a.cols;j++){
            a.at<Vec3b>(i,j)[0] = 0;
            a.at<Vec3b>(i,j)[1] = 0;
            {a.at<Vec3b>(i,j)[2] = 255;
       

و اگر قصد دارید کل تصویر را پیمایش کنید به صورت زیر عمل کنید تا کد شما performance بالاتری برای دسترسی به پیکسل داشته باشه.


    for (int i=0; i < a.rows;i++){
     Vec3b *row = a.ptr<Vec3b>(i)   ;
        for (int j=0; j < a.cols;j++){
           row->val[j*3+ 0] = 0;
           row->val[j*3+1] = 0;
           row->val[j*3+2] = 255;
        }
    }
 

 

البته یکبار در اینجا نیز بحث شده بود.

پاسخ داده شده بهمن 7, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد اسفند 16, 1392 بوسیله ی haniye sarbazi
+2 امتیاز

با یک تناسب ساده :

ImgCol ImgWidth
             ???   = Current_Col x

 

    int curCol=(x*imgCols)/imgWidth;
    int curRow=(y*imgRows)/imgHeight;
    auto& temp=image.at<cv::Vec3b>(curRow,curCol);
    std::cout<< (int)temp[0]<<" "<<(int)temp[1]<<"  "<<(int)temp[2]<<std::endl;

 

پاسخ داده شده بهمن 6, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
...