我正在学习计算机视觉。我在这样的单声道中获得了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);
我想在3个通道(R,G,B)(例如单声道)中获得ROI(我想使用“for”代码),而我只想要在ROI中进行人脸检测之类的操作。在3个通道中,我必须考虑到数组。我知道数组需要数据排序(B,G,R)。所以我认为我必须在宽度和高度上乘以3,但我不能正常工作。如何不使用功能“cv::cvSetImageROI”在多 channel 中获得ROI?
最佳答案
是否要按颜色通道拆分图像并获得每个通道的ROI?
cv::Rect r(0, 0, roi_width, roi_height);
cv::Mat bgr[3];
cv::Mat b_roi;
cv::split(image, bgr);
b_roi = bgr[0](r); // get the ROI of blue channel
希望这可以帮助
关于c++ - 使用计算机视觉捕获图像时,如何在3个 channel 中获得感兴趣的区域?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52323522/