如何检查图像是否相对于基本图像被翻转

时间:2017-07-26 05:15:41

标签: python c++ python-2.7 opencv image-processing

在OpenCV中,我可以使用以下代码水平和垂直翻转图像:

import cv2
img=cv2.imread('1.png')
rimg=img.copy()
fimg=img.copy()
rimg=cv2.flip(img,1)
fimg=cv2.flip(img,0)
cv2.imshow("Original", img)
cv2.imshow("vertical flip", rimg)
cv2.imshow("horizontal flip", fimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

我的问题是:有没有办法检查输入图像是否相对于基本图像翻转?我只是想知道检查图像是否翻转的步骤。

2 个答案:

答案 0 :(得分:1)

这是一个伪c ++解决方案:

bool isSameSize(Image a, Image b)
{
    return a.width() == b.width() && a.height() == b.height();
}
bool isNotFlipped(Image a, Image b)
{
    if(!isSameSize(a, b)) return false;
    for(int y = 0; y < a.height(); ++y)
        for(int x = 0; x < a.width(); ++x)
        {
            if(a.pixel(x, y) != b.pixel(x, y))
                return false;
        }
    return true;
}
bool isFlippedHorizontal(Image a, Image b)
{
    if(!isSameSize(a, b)) return false;
    int w = a.width();
    for(int y = 0; y < a.height(); ++y)
        for(int x = 0; x < a.width(); ++x)
        {
            if(a.pixel(x, y) != b.pixel(w - x - 1, y))
                return false;
        }
    return true;
}
bool isFlippedVertical(Image a, Image b)
{
    if(!isSameSize(a, b)) return false;
    int h = a.height();
    for(int y = 0; y < a.height(); ++y)
        for(int x = 0; x < a.width(); ++x)
        {
            if(a.pixel(x, y) != b.pixel(x, h - y - 1))
                return false;
        }
    return true;
}
bool isFlippedBoth(Image a, Image b)
{
    if(!isSameSize(a, b)) return false;
    int w = a.width();
    int h = a.height();
    for(int y = 0; y < a.height(); ++y)
        for(int x = 0; x < a.width(); ++x)
        {
            if(a.pixel(x, y) != b.pixel(w - x - 1, h - y - 1))
                return false;
        }
    return true;
}

HTH

答案 1 :(得分:0)

一般来说,没有。如果图像以某种方式不对称,那么您可以只是沿不同的轴翻转并进行快速比较以检查是否有任何不相等。

def is_horizontally_flipped(orig, img):
    tst = cv2.flip(img, 1)
    return np.any(orig != tst)