Я изучаю компьютерное зрение. Я получаю ROI в моноканале, как это (см. Я рассчитываю средний цвет пикселя образца.)
std::string path = "C:\\image\\Lenna.png";
cv::Mat mImage = cv::imread(path);
cv::Mat mImage_mono;
cv::cvtColor(mImage, mImage_mono, CV_RGB2GRAY);
int width = mImage_mono.cols;
int height = mImage_mono.rows;
unsigend char * PImage = mImage_mono.data
const int kernel_size = 100;
const int kernel_size_half = 100/2;
int sum
int avg
sum = 0;
for (int row = height / 2 - kernel_size_half; row < height / 2 + kernel_size_half; row++) {
for (int col = width / 2 - kernel_size_half; col < width / 2 + kernel_size_half; col++)
{
int index = row * width + col;
sum+= pImage[index];
}
}
avg = sum / (kernel_size * kernel_size);
Я хочу получить ROI в 3 каналах (R, G, B), таких как моноканалы (я хочу использовать код for), и я хочу что-то вроде распознавания лиц только в ROI. В 3-х каналах я должен учитывать массив. Я знаю, что массив принимает порядок данных (B, G, R). Поэтому я думаю, что я должен умножить 3 на ширину и высоту, и я делаю это, но не работаю правильно. Как я могу получить ROI в нескольких каналах, не используя функцию "cv :: cvSetImageROI"?