我正在尝试从图像中选择一个 3x3 非重叠的感兴趣区域,然后选择该 3x3 的最大值,然后对其进行处理。处理后,我现在想将新的处理值保存在原始图像像素位置,从中选择最大值的位置,而不是在 3x3 的 ROI 区域中。我正在尝试,但无法正确完成。minMaxLoc 给出最大值位置,但那是在 3x3 区域中,而不是在原始图像中,任何身体都可以提供帮助。会感激不尽。
int totalRowsMAx = totalRows-receptiveField+1;
for(int rowsInd=0;rowsInd<totalRowsMAx;rowsInd+=receptiveField){
int jj=0;
int totalColsMAx = totalCols-receptiveField+1;
for(int colsInd=0;colsInd<totalColsMAx;colsInd+=receptiveField){
Mat imgROI1 = img1(cv::Rect(colsInd,rowsInd,receptiveField,receptiveField));
if(maxpooling==true){
minMaxLoc( imgROI1, &minVal, &maxVal, &minLoc, &maxLoc );
cout<<"maxVa adress with and sign "<<&maxLoc<<endl;
cout<<"maxValue in ROI"<<imgROI1.at<double>(maxLoc)<<endl;
cout<<"maxValue address without and sign"<<maxLoc<<endl;
cout<<"maxValue in full image "<<img1.at<double>(maxLoc)<<endl; } } }
您正在使用ROI来选择3X3区域,那么为什么不使用相同的ROI来设置像素。
例如
Mat src;//source image
Rect R(x,y,W,H); //ROI rect
Mat ROI=src(R);
getminmaxonROI() //get your minmax
假设您获得了像 ROI_X 和 ROI_Y 这样的 minimax 位置,并且在源图像中它将如下所示:
SRC_X=ROI_X+R.x;
SRC_Y=ROI_Y+R.y;