Приложен изкуствен интелект


0

Имам един въпрос относно методa FindBatteries:

1.Как запълвам полето points с всички пиксели, които отговарят на условието:2*B<r и r>200?

И още един:

2. Не получавам местонахождението на хексапода върху картата и не знам защо

:( , това е кодът:

void FindHexapod(const cv::Mat& rgb)
{
    cv::Point pos = cv::Point(0,0);
    int pts,index=0;
    for (int y = 0; y < rgb.rows; y++){
        for (int x = 0; x < rgb.cols; x++)
        {
            index = 3 * (y*rgb.cols+x);
            if(rgb.data[index]>200 && 
                rgb.data[index+1]>200 && 
                rgb.data[index+2]>200)
            {
                pos = pos + cv::Point(y,x);
                 pts++;
            }    
        }
    }
    cout<<hex_pos;
    hex_pos = pos*(1.0/pts);
}

Благодаря за помощта предварително ! :)




Отговори



2

По първата задача:

Понеже в OpenCV са наобратно цветовете, т. е. вместо RGB се ползва BGR, то rgb.data[index] e Blue, rgb.data[index + 1] e Green, а rgb.data[index + 2] е Red. С тази информация вече е лесно да се напише кода:
 
if (2*rgb.data[index] < rgb.data[index + 2] &&
    rgb.data[index + 2] > 200) { /* ... */ }

 




0
Мисля, че успях да го напиша, но компилаторът не е съгласен с мен.Още малко помощ може ли ?
това е кодът:
void FindHexapod(const cv::Mat& rgb) { // Find all pixels that belong to the hexapod and then // set hex_pos to the average of the hexpod pixels. // Hint: the hexapod is lighter than RGB(200, 200, 200)
// ADD CODE HERE cv::Point pos = cv::Point(0,0); int pts,index=0; for (int y = 0; y < rgb.rows; y++){
for (int x = 0; x < rgb.cols; x++) { // The index for the processed pixel index = 3 * (y*rgb.cols+x); if(2*rgb.data[index]>200 && rgb.data[index+1]>200 && rgb.data[index+2]>200) { pos = pos + cv::Point(y,x); pts++; } } }
hex_pos = pos*(1.0/pts); // Set hex_pos to the correct position
}
void FindBatteries(const cv::Mat& rgb) { // Fill in the vector points with all pixels // which correspond to the batteries: // 2 * B < R and R > 200 std::vector


0
points е vector, който може да съдържа само обекти от тип Point (std::vector