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

Python 在OpenCV中改变像素值后,图像沿对角线轴反射,python,opencv,Python,Opencv,我使用OpenCV来访问图像,然后使用cv2.FindContours函数编写了python代码。我提取了所有轮廓,并过滤了周长最大的轮廓 我的目标是现在把这个轮廓外的所有像素都变成黑色,只让这个轮廓内的像素变成白色。为此,我使用了cv.pointPolyContest函数,它告诉您一个点是否在多边形内。但是,当我使用cv2.imwrite编写结果时,我也惊讶地看到图像旋转,后来意识到它实际上是沿左上角到右下角对角线的反射图像 由于我的图像是矩形而不是正方形,这会导致我感兴趣的部分区域被截断。我

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

我的目标是现在把这个轮廓外的所有像素都变成黑色,只让这个轮廓内的像素变成白色。为此,我使用了
cv.pointPolyContest
函数,它告诉您一个点是否在多边形内。但是,当我使用cv2.imwrite编写结果时,我也惊讶地看到图像旋转,后来意识到它实际上是沿左上角到右下角对角线的反射图像

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

输入图像

和输出图像

导入cv2
导入cv
作为cp导入副本
进口numpy
im\u gray=cv2.imread('1191res.jpg',cv2.CV\u LOAD\u IMAGE\u灰度)
im_gray2=cp.copy(im_gray)
轮廓,层次=cv2.findContours(im_gray2,cv2.RETR_树,cv2.CHAIN_近似值_SIMPLE)
#循环以计算相关的轮廓索引
L参数=0
i=0
x=0
而(x对数):
lperimeter=cv2.弧长(等高线[x],真)
i=x
x=x+1
#将轮廓[i]转换为函数cv.POINTPOLYCONTEST识别的类型
结果=cv.fromarray(等高线[i])
行=长(灰色)
col=len(灰色[0])
x=0
打印行
打印颜色
nop=0
r=0
c=0
而r<(世界其他地区):
c=0
而c<(col):
如果(cv.POINTPOLYCONTEST)(结果,(r,c),False)=-1):
im_gray[r,c]=0
nop+=1
其他:
im_gray[r,c]=255
c+=1
r+=1
打印否
cv2.imwrite(“result1.jpg”,im_gray)
接受一个
点,即
(x,y)
,即
(列,行)

您需要将代码更改为:

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

点是
(x,y)
,即
(列,行)
。将代码更改为:
if(cv.pointPolyContest(result,(c,r),False)=-1):
@Miki…成功了…谢谢…真是太傻了!!!很高兴它起到了作用,作为答案发布then@Miki....even虽然问题已经解决了…您是否了解图像被反射的原因???我的意思是c和r只是两个数字…它们被传递到cv.PointPolyContest函数…为什么它会影响图像?因为您正在测试,例如,(5,3),但随后您设置了点(3,5)这将导致图像被反射。
if( cv.PointPolygonTest(result,(c,r),False) == -1):
                                ^^^