Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Image rotation problem in for loop(Geometric transformation)

The code works correctly, but the zbar plugin only reads the bar code on the horizontal and vertical axes.For this reason, I want to rotate the cross image at the end of the image output.So zbar will read the picture correctly.

But unfortunately I could not rotate the image correctly in the for loop. It rotates the image but does not do this for 180 degrees.I tried to write the code correctly, but I could not reach the end result.I think there's a problem with the warpaffine geometric tarnsformation function.

Any help will be apreciated to find the solution.

Here is example image outputs which is not properly rotated according to specified angle in for loop with explaination : image description

For loop(main code part) , which will be able to rotate image untill 120 degree of angle :

if ((zbar_scanner.barcode_string == "") || (zbar_scanner.barcode_string.length() <= 5)){


    for (float tr = 0; tr <= 120; tr += 20){

        cout << "ANGLE OF ROTATION" << tr << endl;


            zbar_scanner.Image_Transform = Geometric_Transformation(zbar_scanner.cut_image_zbar1, tr);//call rotate function.It is available below.zbar_scanner.cut_image_zbar1 is the image that will be processed and rotated

        zbar_scanner.scanner1.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);

        Image image1(zbar_scanner.Image_Transform.cols, zbar_scanner.Image_Transform.rows, "Y800", zbar_scanner.Image_Transform.data, zbar_scanner.Image_Transform.cols * zbar_scanner.Image_Transform.rows);

         zbar_scanner.scanner1.scan(image1);

        for (Image::SymbolIterator symbol1 = image1.symbol_begin();
            symbol1 != image1.symbol_end();
            ++symbol1) {

            // print out barcode string in each turn
            cout << "DECODED " << symbol1->get_type_name() << " SYMBOL \"" << symbol1->get_data() << '"' << endl;
            zbar_scanner.barcode_after_transform.append(symbol1->get_data());
        }

        if ((zbar_scanner.barcode_after_transform != "") || (zbar_scanner.barcode_after_transform.length() > 5)){

            return zbar_scanner.barcode_after_transform;
            break;//if barcode is read, break the for loop
        }

        image1.set_data(NULL, 0);
    }
}

Here is the rotation function which is called above by

**> " zbar_scanner.Image_Transform =

Geometric_Transformation(zbar_scanner.cut_image_zbar1, tr);"

Mat Morphology::Geometric_Transformation(Mat& CutImage, float Transform){

src_center = Point2f(CutImage.cols /2 , CutImage.rows / 2); /// 2.0F /10.0f

rot_mat = getRotationMatrix2D(src_center, -Transform, 1);

rot_imagebox = RotatedRect(src_center, CutImage.size(), -Transform).boundingRect();

rot_mat.at<double>(0, 2) += rot_imagebox.width / 2.0 - src_center.x;//look for at command
rot_mat.at<double>(1, 2) += rot_imagebox.height / 2.0 - src_center.y;

if ((CutImage.cols > 0) && (CutImage.rows > 0)){
    warpAffine(CutImage, dst, rot_mat, rot_imagebox.size()); //rotate image with given angle by for loop value

    cvtColor(dst, dst, CV_RGB2GRAY);
    imshow("Rotated Image", dst);

}
return dst; //return otput image for each rotation

}

Image rotation problem in for loop(Geometric transformation)

The Nowaday I am trying to write barcode reader program with opencv and zbar.The code works correctly, but the zbar plugin only reads the bar code on the horizontal and vertical axes.For this reason, I want to rotate the cross image at the end of the image output.So zbar will read the picture correctly.

But unfortunately I could not rotate the image correctly in the for loop. It rotates the image but does not do this for 180 degrees.I tried to write the code correctly, but I could not reach the end result.I think there's a problem with the warpaffine geometric tarnsformation function.

Any help will be apreciated to find the solution.

Here is example image outputs which is not properly rotated according to specified angle in for loop with explaination : image description

For loop(main code part) , which will be able to rotate image untill 120 degree of angle :

if ((zbar_scanner.barcode_string == "") || (zbar_scanner.barcode_string.length() <= 5)){


    for (float tr = 0; tr <= 120; tr += 20){

        cout << "ANGLE OF ROTATION" << tr << endl;


            zbar_scanner.Image_Transform = Geometric_Transformation(zbar_scanner.cut_image_zbar1, tr);//call rotate function.It is available below.zbar_scanner.cut_image_zbar1 is the image that will be processed and rotated

        zbar_scanner.scanner1.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);

        Image image1(zbar_scanner.Image_Transform.cols, zbar_scanner.Image_Transform.rows, "Y800", zbar_scanner.Image_Transform.data, zbar_scanner.Image_Transform.cols * zbar_scanner.Image_Transform.rows);

         zbar_scanner.scanner1.scan(image1);

        for (Image::SymbolIterator symbol1 = image1.symbol_begin();
            symbol1 != image1.symbol_end();
            ++symbol1) {

            // print out barcode string in each turn
            cout << "DECODED " << symbol1->get_type_name() << " SYMBOL \"" << symbol1->get_data() << '"' << endl;
            zbar_scanner.barcode_after_transform.append(symbol1->get_data());
        }

        if ((zbar_scanner.barcode_after_transform != "") || (zbar_scanner.barcode_after_transform.length() > 5)){

            return zbar_scanner.barcode_after_transform;
            break;//if barcode is read, break the for loop
        }

        image1.set_data(NULL, 0);
    }
}

Here is the rotation function which is called above by

**> " zbar_scanner.Image_Transform =

Geometric_Transformation(zbar_scanner.cut_image_zbar1, tr);"

Mat Morphology::Geometric_Transformation(Mat& CutImage, float Transform){

src_center = Point2f(CutImage.cols /2 , CutImage.rows / 2); /// 2.0F /10.0f

rot_mat = getRotationMatrix2D(src_center, -Transform, 1);

rot_imagebox = RotatedRect(src_center, CutImage.size(), -Transform).boundingRect();

rot_mat.at<double>(0, 2) += rot_imagebox.width / 2.0 - src_center.x;//look for at command
rot_mat.at<double>(1, 2) += rot_imagebox.height / 2.0 - src_center.y;

if ((CutImage.cols > 0) && (CutImage.rows > 0)){
    warpAffine(CutImage, dst, rot_mat, rot_imagebox.size()); //rotate image with given angle by for loop value

    cvtColor(dst, dst, CV_RGB2GRAY);
    imshow("Rotated Image", dst);

}
return dst; //return otput image for each rotation

}

Image rotation problem in for loop(Geometric transformation)

Nowaday I am trying to write barcode reader program with opencv and zbar.The code works correctly, but the zbar plugin only reads the bar code on the horizontal and vertical axes.For this reason, I want to rotate the cross image at the end of the image output.So zbar will read the picture correctly.

But unfortunately I could not rotate the image correctly in the for loop. It rotates the image but does not do this for 180 degrees.I tried to write the code correctly, but I could not reach the end result.I think there's a problem with the warpaffine geometric tarnsformation function.

Any help will be apreciated to find the solution.

Here is example image outputs which is not properly rotated according to specified angle in for loop with explaination : image description

For loop(main code part) , which will be able to rotate image untill 120 degree of angle :

if ((zbar_scanner.barcode_string == "") || (zbar_scanner.barcode_string.length() <= 5)){


    for (float tr = 0; tr <= 120; tr += 20){

        cout << "ANGLE OF ROTATION" << tr << endl;


            zbar_scanner.Image_Transform = Geometric_Transformation(zbar_scanner.cut_image_zbar1, tr);//call rotate function.It is available below.zbar_scanner.cut_image_zbar1 is the image that will be processed and rotated

        zbar_scanner.scanner1.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);

        Image image1(zbar_scanner.Image_Transform.cols, zbar_scanner.Image_Transform.rows, "Y800", zbar_scanner.Image_Transform.data, zbar_scanner.Image_Transform.cols * zbar_scanner.Image_Transform.rows);

         zbar_scanner.scanner1.scan(image1);

        for (Image::SymbolIterator symbol1 = image1.symbol_begin();
            symbol1 != image1.symbol_end();
            ++symbol1) {

            // print out barcode string in each turn
            cout << "DECODED " << symbol1->get_type_name() << " SYMBOL \"" << symbol1->get_data() << '"' << endl;
            zbar_scanner.barcode_after_transform.append(symbol1->get_data());
        }

        if ((zbar_scanner.barcode_after_transform != "") || (zbar_scanner.barcode_after_transform.length() > 5)){

            return zbar_scanner.barcode_after_transform;
            break;//if barcode is read, break the for loop
        }

        image1.set_data(NULL, 0);
    }
}

Here is the rotation function which is called above by

**> " zbar_scanner.Image_Transform =

Geometric_Transformation(zbar_scanner.cut_image_zbar1, tr);"zbar_scanner.Image_Transform=Geometric_Transformation(zbar_scanner.cut_image_zbar1,tr);

Mat Morphology::Geometric_Transformation(Mat& CutImage, float Transform){

src_center = Point2f(CutImage.cols /2 , CutImage.rows / 2); /// 2.0F /10.0f

rot_mat = getRotationMatrix2D(src_center, -Transform, 1);

rot_imagebox = RotatedRect(src_center, CutImage.size(), -Transform).boundingRect();

rot_mat.at<double>(0, 2) += rot_imagebox.width / 2.0 - src_center.x;//look for at command
rot_mat.at<double>(1, 2) += rot_imagebox.height / 2.0 - src_center.y;

if ((CutImage.cols > 0) && (CutImage.rows > 0)){
    warpAffine(CutImage, dst, rot_mat, rot_imagebox.size()); //rotate image with given angle by for loop value

    cvtColor(dst, dst, CV_RGB2GRAY);
    imshow("Rotated Image", dst);

}
return dst; //return otput image for each rotation

}

Image rotation problem in for loop(Geometric transformation)

Nowaday I am trying to write barcode reader program with opencv and zbar.The code works correctly, but the zbar plugin only reads the bar code on the horizontal and vertical axes.For this reason, I want to rotate the cross image at the end of the image output.So zbar will read the picture correctly.

But unfortunately I could not rotate the image correctly in the for loop. It rotates the image but does not do this for 180 degrees.I tried to write the code correctly, but I could not reach the end result.I think there's a problem with the warpaffine geometric tarnsformation function.

Any help will be apreciated to find the solution.

Here is example image outputs which is not properly rotated according to specified angle in for loop with explaination : image description

For loop(main code part) , which will be able to rotate image untill 120 degree of angle :

if ((zbar_scanner.barcode_string == "") || (zbar_scanner.barcode_string.length() <= 5)){


    for (float tr = 0; tr <= 120; tr += 20){

        cout << "ANGLE OF ROTATION" << tr << endl;


            zbar_scanner.Image_Transform = Geometric_Transformation(zbar_scanner.cut_image_zbar1, tr);//call rotate function.It is available below.zbar_scanner.cut_image_zbar1 is the image that will be processed and rotated

        zbar_scanner.scanner1.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);

        Image image1(zbar_scanner.Image_Transform.cols, zbar_scanner.Image_Transform.rows, "Y800", zbar_scanner.Image_Transform.data, zbar_scanner.Image_Transform.cols * zbar_scanner.Image_Transform.rows);

         zbar_scanner.scanner1.scan(image1);

        for (Image::SymbolIterator symbol1 = image1.symbol_begin();
            symbol1 != image1.symbol_end();
            ++symbol1) {

            // print out barcode string in each turn
            cout << "DECODED " << symbol1->get_type_name() << " SYMBOL \"" << symbol1->get_data() << '"' << endl;
            zbar_scanner.barcode_after_transform.append(symbol1->get_data());
        }

        if ((zbar_scanner.barcode_after_transform != "") || (zbar_scanner.barcode_after_transform.length() > 5)){

            return zbar_scanner.barcode_after_transform;
            break;//if barcode is read, break the for loop
        }

        image1.set_data(NULL, 0);
    }
}

Here is the rotation function which is called above by

zbar_scanner.Image_Transform=Geometric_Transformation(zbar_scanner.cut_image_zbar1,tr);

Mat Morphology::Geometric_Transformation(Mat& CutImage, float Transform){

src_center = Point2f(CutImage.cols /2 , CutImage.rows / 2); /// 2.0F /10.0f

rot_mat = getRotationMatrix2D(src_center, -Transform, 1);

rot_imagebox = RotatedRect(src_center, CutImage.size(), -Transform).boundingRect();

rot_mat.at<double>(0, 2) += rot_imagebox.width / 2.0 - src_center.x;//look for at command
rot_mat.at<double>(1, 2) += rot_imagebox.height / 2.0 - src_center.y;

if ((CutImage.cols > 0) && (CutImage.rows > 0)){
    warpAffine(CutImage, dst, rot_mat, rot_imagebox.size()); //rotate image with given angle by for loop value

    cvtColor(dst, dst, CV_RGB2GRAY);
    imshow("Rotated Image", dst);

}
return dst; //return otput image for each rotation

}