在OpenCV中像素值改变后,图像沿对角轴反射

时间:2015-11-17 11:35:46

标签: python opencv

我使用 OpenCV 编写了一个python代码来访问图像然后使用cv2.FindContours函数我提取了所有轮廓并使用最大的周长过滤了轮廓

我的目标是现在将此轮廓之外的所有像素都变为黑色,并仅让此轮廓内的像素变为白色。为此,我使用了cv.PointPolygonTest函数,该函数告诉您点是否在多边形内。但是当我使用cv2.imwrite编写我的结果时,我也惊讶地看到图像旋转,后来发现它实际上是沿着左上角到右下角的反射图像。

由于我的图像是矩形而不是正方形,这会导致我的一些感兴趣的区域被切断。我将代码与

一起附加

输入图片

enter image description here

和输出图像

enter image description here

import cv2
import cv
import copy as cp
import numpy

im_gray = cv2.imread('1191res.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE)
im_gray2 = cp.copy(im_gray)

contours, hierarchy = cv2.findContours(im_gray2,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

#loop to calculate the relevant contour index
lperimeter = 0
i = 0
x = 0

while (x < len(contours)):
    if(cv2.arcLength(contours[x], True) > lperimeter):
        lperimeter = cv2.arcLength(contours[x],True)
        i = x
    x = x+1

#converting the contours[i] to a type recognized by function cv.PointPolygonTest
result = cv.fromarray(contours[i])

row = len(im_gray)
col = len(im_gray[0])
x = 0

print row
print col

nop = 0
r = 0
c = 0

while r < (row):
    c = 0
    while c < (col):
        if( cv.PointPolygonTest(result,(r,c),False) == -1):
            im_gray[r, c] = 0
            nop+=1
        else:
            im_gray[r, c] = 255
        c+=1
    r+=1
print nop
cv2.imwrite("result1.jpg",im_gray)

1 个答案:

答案 0 :(得分:1)

pointPolygonTest接受Point (x,y),即(column, row)

您需要将代码更改为:

if( cv.PointPolygonTest(result,(c,r),False) == -1):
                                ^^^