/ /画像マトリックス内の半透明の黒い長方形の領域の場所の検出Python OpenCV - python、opencv、画像処理、opencv-contour

Python OpenCV - python、opencv、image-processing、opencv-contourイメージマトリックスPython OpenCVの半透明黒色矩形領域の位置を検出する

このような画像があるとします。

ここに画像の説明を入力

私は欲しい 画像マトリックス内の黒いストリップの始点と終点の位置.

私はいくつかの方法を試してみました Python OpenCVでの横線検出 次のような行を強調表示するコードを思い付きました。

import cv2
import numpy as np
from numpy import array
from matplotlib import pyplot as plt
import math

img = cv2.imread("caption.jpg")

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize = 3)
lines = cv2.HoughLinesP(edges, 1,np.pi/180,350);
for line in lines[0]:
pt1 = (line[0],line[1])
pt2 = (line[2],line[3])
cv2.line(img, pt1, pt2, (0,0,255))



gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)

print img.shape

lines = cv2.HoughLines(edges,1,np.pi/180,350)

for rho,theta in lines[0]:
a = np.cos(theta)
b = np.sin(theta)
if int(b) == 1: #only horizontal lines with cos theta(theta = 0) = 1
x0 = a*rho
y0 = b*rho
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*(a))
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*(a))

cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)

cv2.imshow("edges", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

結果: ここに画像の説明を入力

試してみたら print x1, y1, x2, y2 私は得る

-1000 781 999 782 -1000 712 999 713

したがって、これらは明らかにxが負のように画像行列内の位置点ではありません。

画像マトリックス内のこれらの線の始点と終点の位置は何ですか? その領域のピクセルに何らかの点演算を実行する必要があるため、開始点と終点が必要です。

回答:

回答№1は1

これらの行は常に-1000 +元の点を返します

x1 = int(x0 + 1000*(-b))
x2 = int(x0 - 1000*(-b))

あなたはこのループに入るだけなので int(b) == 1:

これは、上記の行が常になるので、あなたは直接x0を印刷する必要があることを意味します。 (x0 + (-1000)), この場合、x0は画像の左から始まるので0です。