質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1407閲覧

座標の変換および順序整理

babaa

総合スコア4

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/22 07:30

画像を二値化して,白色部分の座標を摘出するプログラムを作成しました.画像処理の部分は省略しています.
座標を取得するところまではできたのですが,座標が(1,1),(1,2),(1,3)...とx軸を基準にプロットされます.これを(1,1),(2,1),(3,1)のようにy軸を基準に結果が表示されるように変更したいです.アドバイスお願いします.

また,お時間があればcsvファイルへの書き出しの方法もアドバイスお願いします.現在のプログラムで書き出すと,

3n0n0n
n3n0n0n
n3n0n0n
n3n0n1n
n3n0n1n
n3n0n1n
...
のように暗号みたいになってしまいます.

import cv2 import numpy as np from IPython import display from matplotlib import pyplot as plt import csv def imshow(img, format=".BMP", **kwargs): """ndarray 配列をインラインで Notebook 上に表示する。 """ img = cv2.imencode(format, img)[1] img = display.Image(img, **kwargs) display.display(img) for i in range(10, 30, 1): #iは5桁の数値 number = str("%05.f" %i) im = cv2.imread(r"C:\python\RUN0008\batched1\RUN0008_"+number+".bmp") .... edges = cv2.Canny(gauss,minVal,maxVal,SobelSize) #白色部分の座標取得 point = list(zip(*np.where(edges > 0))) for x,y in point: ans = str(x)+'\n' file = (r"C:\python\RUN0008\memotocsv\RUN0008_"+number+".csv") #末尾に追加 f = open(file, "a", encoding="utf_8") text = csv.writer(f, lineterminator="n") text.writerows(ans) f.close() cv2.imwrite(r"C:\python\RUN0008\test2\RUN0008_"+number+".bmp", edges) plt.show() print()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/10/22 07:45

> 順序整理 「ソート」で調べてみてはどうでしょうか? CSV出力についてはどう出力したいのでしょうか?
babaa

2021/10/22 07:49

ありがとうございます.ソート追加してみます. csvについての知識がほぼ0なので,理想はexcelに y1|x1 y1|x2 ... と書き出されてほしいです
meg_

2021/10/22 10:51 編集

"暗号みたいになってしまいます"は「lineterminator="n"」の結果では?質問者さんが書いたコードですよね?意図があって書かれたのだと思いますが。。 ⇒ もしかして「\n」と書いたつもりが「n」になってしまっていたのでしょうか?
guest

回答2

0

  • (1,1),(2,1),(3,1)のようにy軸を基準に結果が表示される

python

1 point = list(zip(*np.where(edges > 0)))

python

1point = list(zip(*np.where(edges > 0)[::-1]))

に変更しましょう。

  • 暗号みたいになってしまいます.

求めるものがよくわかりませんが、

python

1 text = csv.writer(f, lineterminator="n")

python

1 text = csv.writer(f, lineterminator="\n")

にするのが普通ではないでしょうか。

投稿2021/10/22 08:00

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

以下のような感じです。まずはy->x順に並べ替えます。
またファイル出力ではループで回す必要はないです。

Python

1import csv 2 3point = [(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)] 4point = sorted(point, key=lambda p:(p[1],p[0])) # y->x順に並び変え 5 6with open('ret.csv', 'a', newline='') as f: # 改行はcsvに任せる 7 text = csv.writer( f) 8 text.writerows(point) # 複数行をまとめて出力

投稿2021/10/22 07:48

can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問