

使用ツール  
・Python 3.6  
・OpenCV 4.5 (※最新版を入れました)  
・Anaconda 3.0

初めて画像処理に触れました。最初は本当に楽しく出来そうだなぁと感じていたのですが、エラーが出てしまって、全くプログラムが動きません。

OpenCVのバージョンが異なる為、動かないと言われたのですが、正直に言いますと、どこが違っているのか分かりません。

出てきたエラー

[code]

    AttributeError: module 'cv2.cv2' has no attribute 'cvtcolor'
    
[/code]

動かしたいコード

[code]

    import cv2
    image = cv2.imread(r"C:\library_cv\sky_006.jpg)
    gray = cv2.cvtcolor(image, cv2.COLOR.BGR2GRAY)
    cv2.imwrite(r"C:\write_cv\gray_006.jpg")
    
[/code]

上記のコードに `cv2.countNonZero` を使って、白の割合を出すのが目標です。  
※画像名は仮想ですが、概ねこの通りです。


CC BY-SA 4.0
2021-01-18T10:29:18.183
73389
2021-01-18T12:52:43.173
2021-01-18T12:33:16.250
3060
43572
question
python python3 opencv
Python & OpenCV でグレイスケール化をしたいのですが、AttributeError が出てしまう


質問のエラーも含めて幾つか typo があります。  
以下のようにすれば動作するでしょう。

[code]

    import cv2
    image = cv2.imread(r"C:\library_cv\sky_006.jpg")
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    cv2.imwrite(r"C:\write_cv\gray_006.jpg", gray)
    
[/code]

  * `imread`のファイル名の`"`が閉じていない(質問時の転記ミスでしょう)
  * `cvtcolor`の`color`は大文字で始まる`cvtColor`
  * `cv2.COLOR.BGR2GRAY`は`cv2.COLOR_BGR2GRAY`の間違い(`.`ではなく`_`で接続する)
  * `imwrite`は2つ目のパラメータにイメージのオブジェクトを指定する必要がある

* * *

コメントのリンク先は正しくはこちら  
[Python,OpenCVで二値画像から白と黒の面積比を算出](https://techtech-
sorae.com/pythonopencv%E3%81%A7%E4%BA%8C%E5%80%A4%E7%94%BB%E5%83%8F%E3%81%8B%E3%82%89%E7%99%BD%E3%81%A8%E9%BB%92%E3%81%AE%E9%9D%A2%E7%A9%8D%E6%AF%94%E3%82%92%E7%AE%97%E5%87%BA/)

上記記事の`bw_image`は2値化された画像データのオブジェクトです。  
仕様はこちら。  
[cv::threshold](http://opencv.jp/opencv-2svn/cpp/miscellaneous_image_transformations.html?highlight=threshold#cv-
threshold)  
[画像の閾値処理](http://whitewell.sakura.ne.jp/OpenCV/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html)  
[Python: cv2.threshold(src, thresh, maxval, type[, dst]) → retval,
dst](https://docs.opencv.org/3.0-beta/modules/imgproc/doc/miscellaneous_transformations.html?highlight=cv2.threshold#cv2.threshold)

使い方などの記事はこちら。  
[OpenCV – 画像処理の2値化の仕組みと cv2.threshold() の使い方](https://pystyle.info/opencv-
image-binarization/)  
[cv2.threshold()](https://pystyle.info/opencv-image-binarization/#outline__4)

>   * 返り値
>     * retval: 閾値 (cv2.THRESH_OTSU、cv2.THRESH_TRIANGLE
> を使用した場合に自動的に決まった閾値を知るための返り値)
>     * dst: 2値画像
>


CC BY-SA 4.0
2021-01-18T11:36:40.387
73390
2021-01-18T12:52:43.173
2021-01-18T12:52:43.173
26370
26370
73389
answer