2016-12-14 18 views
4

私は他の投稿の回答を探していましたが、いくつかの方法で試してみましたが、私の問題を解決するものは何も見つかりませんでした。イメージの光学的な歪みを修正しようとしていますが、結果イメージの湾曲した黒い罫線を削除するためにイメージをトリミングする必要があります。OpenCV(Python)で補正された歪みの画像をトリミング

h, w = corrected_img.shape[:2] 
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(cameraMTX,distortionCoeffs,(w,h),1,(w,h)) 
x,y,w,h = roi 
desired_result = corrected_img[y:y+h, x:x+w] 

enter image description here

は、私は次のコードでトリミングしようとしました:私はこのようにトリミングしたい

problem

:だから、要約すると、これは私の問題です

残念ながら、roiの値は、常に(0,0,0,0)です。

誰でもお手伝いできますか?

ありがとうございます。

+0

ご回答ありがとうございます。アルファ= 0の場合は、左の部分のわずかな領域しか得られません。それは動作しません。 – Carlos

+0

歪みを修正するためのコードを掲載することはできますか?これはまさに私が探していたものです...歪みと歪みの両方を修正しています... –

答えて

5

空白部分は画像の中央に最大値と最小値を持つので、真ん中の線を見つけて色が変わったときを見ることができます。下の画像は、これを明確にする:

enter image description here

は、あなただけの画像にx1y1x2y2を示し見つける必要があります。色が閾値を超えるまで、私が何をしたか

import cv2 
# Reads the image in grayscale 
img = cv2.imread('Undistorted.jpg', 0) 
h, w = img.shape 
x1, x2, y1, y2 = (0,0,0,0) 

# Color threshold of the void part 
void_th = 10 

# List of colors in the vertical an horizontal lines that cross the image in the middle 
vertical = [img[i, int(w/2)] for i in range(h)] 
horizontal = [img[int(h/2), i] for i in range(w)] 

# Reverses both lists 
vertical_rev = vertical[::-1] 
horizontal_rev = horizontal[::-1] 

# Looks when the change of color is done 
for i in range(2,h): 
    if vertical[i] > void_th and y1 == 0: 
     y1 = i 
    if vertical_rev[i] > void_th and y2 == 0: 
     y2 = i 
    if y1 != 0 and y2 != 0: 
     break 
for i in range(2,w): 
    if horizontal[i] > void_th and x1 == 0: 
     x1 = i 
    if horizontal_rev[i] > void_th and x2 == 0: 
     x2 = i 
    if x1 != 0 and x2 != 0: 
     break 

desired_result = img[y1:h-y2, x1:w-x2] 
cv2.imshow('Crop', desired_result) 

は、ループそれらを中央のラインの画素の色のリストであり、そして(0は黒で、255はホワイトです):これは以下のように行うことができます。色が変化する最初の画素が検出されると、その位置が記憶され、ループが壊れる。

enter image description here

注:出力がトリミングされた画像である私は、これは必要ありません、元の画像と、理由は境界線の位置2からループし始めました。

これが役に立った!

+2

驚くべき答え、私の友人。完全に動作し、素晴らしく説明されています。おめでとう、ありがとう! – Carlos

+2

ありがとうございます!私は、空白部分が必ずしも対称ではないことに気付きました。したがって、逆のリストもループする必要があります。ちょうど編集されました! – ebeneditos

関連する問題