I've been trying to find the best way to detect the 4 black squares on the paper and use them to isolate the paper in its own image.

I've been trying to find the best way to detect the 4 black squares on the paper and use them to isolate the paper in its own image.

 
    
     
    
    It seems that on your image there are only 4 black squares so what you have to do is:
Do the check:
A) Rectangle's area is bigger that some constant (in my solution it was 100)
B) Rectangle's width/height is near 1.0 (in my soultion it was [0.9, 1.1] range)
The code:
Mat img = imread("test.jpg"), gray;
vector<Vec4i> hierarchy;
vector<vector<Point2i> > contours;
cvtColor(img, gray, CV_BGR2GRAY);
threshold(gray, gray, 100, 255, THRESH_BINARY);
bitwise_not(gray, gray);
findContours(gray, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
for(size_t i=0; i<contours.size(); i++)
{
    Rect rect = boundingRect(contours[i]);
    double k = (rect.height+0.0)/rect.width;
    if (0.9<k && k<1.1 && rect.area()>100)
    {
        drawContours(img, contours, i, Scalar(0,0,255));
    }
}
imshow("result", img);
waitKey();
Result:

Also read this SO discussion - you don't need that 4 squares to detect paper.
 
    
    