If you write one function to split a region into four pieces you can then use it to split a region as many times as you want. That is, to the limits of the data type you are using.
You are pretty much there already. You can simplify the code considerably if you calculate the half width and half height values first. Here is what that could look like :
int halfhigh = img.rows / 2;
int halfwide = img.cols / 2;
switch( region )
{
case 0: crop = img( Rect( 0, 0, halfwide, halfhigh ) ); break;
case 1: crop = img( Rect( halfwide + 1, 0, halfwide, halfhigh ) ); break;
case 2: crop = img( Rect( 0, halfhigh + 1, halfwide, halfhigh ) ); break;
case 3: crop = img( Rect( halfwide + 1, halfhigh + 1, halfwide, halfhigh ) ); break;
}