ためすう

pow を使ってみる (C++)

2019-10-01

やったこと

pow を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

test.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    std::cout << "pow(3.0, 2.0)  = " << std::pow(3.0, 2.0) << std::endl;
    std::cout << "pow(5.0, 3.0)  = " << std::pow(5.0, 3.0) << std::endl;
}

出力結果

pow(3.0, 2.0)  = 9
pow(5.0, 3.0)  = 125

参考

^ 演算子を使ってみる (C++)

2019-09-30

やったこと

^ 演算子 (排他的論理和) を使ってみます。

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

xor.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 0b -> 2進数を表す
    int a =  0b11010110;
    int b =  0b01110101;

    cout << std::bitset<8>(a ^ b) << "\n";
}

出力結果

10100011

参考

upper_bound と lower_bound を使ってみる (C++)

2019-09-30

やったこと

下記メソッドを使ってみます。

  • upper_bound
  • lower_bound

確認環境

$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

調査

upper_bound

指定された要素より大きい値が現れる最初の位置のイテレータを取得する

lower_bound

指定された要素以上の値が現れる最初の位置のイテレータを取得する。

lower_upper.cpp

#include <bits/stdc++.h>
using namespace std;

int A[10] = {1, 3, 3, 5, 7};

int main() {

    printf("%d\n", *upper_bound(A, A + 5, 3));
    printf("%d\n", *lower_bound(A, A + 5, 3));

    printf("%d\n", upper_bound(A, A + 5, 3));
    printf("%d\n", lower_bound(A, A + 5, 3));

    printf("%d\n", upper_bound(A, A + 5, 3) - lower_bound(A, A + 5, 3));
}

出力結果

5
3
117379276
117379268
2

参考

cv2.threshold を使ってみる

2019-09-29

やったこと

OpenCV の cv2.threshold を使ってみます。

確認環境

Google Colaboratory で試しました。

import cv2
print(cv2.__version__)
3.4.3

調査

import matplotlib.pyplot as plt
import cv2

fig = plt.figure(figsize=(10, 5))

img_bgr = cv2.imread('hoge.jpg')
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)

fig.add_subplot(1, 3, 1)
ret_val, result_img = cv2.threshold(img_rgb, 95, 128, cv2.THRESH_TOZERO)
plt.imshow(result_img)

fig.add_subplot(1, 3, 2)
ret_val, result_img = cv2.threshold(img_rgb, 100, 255, cv2.THRESH_BINARY)
plt.imshow(result_img)

fig.add_subplot(1, 3, 3)
plt.imshow(img_rgb)

plt.show()

参考

cv2.erode を使ってみる

2019-09-28

やったこと

OpenCV の cv2.erode を使ってみます。

確認環境

Google Colaboratory で試しました。

import cv2
print(cv2.__version__)
3.4.3

調査

import matplotlib.pyplot as plt
import numpy as np
import cv2

img_bgr = cv2.imread('hoge.jpg')
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
fig = plt.figure(figsize=(10, 5))


filter_one = np.ones((3, 3))
my_filter = np.array([[1, 0, 0], [1, 0, 0], [1, 0, 0]], np.uint8)

fig.add_subplot(1, 3, 1)
result_img = cv2.erode(img_rgb, filter_one)
plt.imshow(result_img)

fig.add_subplot(1, 3, 2)
result_img = cv2.erode(img_rgb, my_filter)
plt.imshow(result_img)

plt.show()

参考

cv2.flip で画像を反転する

2019-09-28

やったこと

OpenCVの cv2.flip を使い、画像を反転します。

確認環境

Google Colaboratory で試しました。

import cv2
print(cv2.__version__)
3.4.3

調査

import matplotlib.pyplot as plt
import cv2

fig = plt.figure(figsize=(10, 5))
img_bgr = cv2.imread('hoge.jpg')
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)

fig.add_subplot(1, 3, 1)
# 上下反転
result_img = cv2.flip(img_rgb, 0)
plt.imshow(result_img)

fig.add_subplot(1, 3, 2)
# 左右反転
result_img = cv2.flip(img_rgb, 1)
plt.imshow(result_img)

fig.add_subplot(1, 3, 3)
# 上下左右反転
result_img = cv2.flip(img_rgb, -1)
plt.imshow(result_img)

plt.show()

参考

cv2.GaussianBlur で画像をぼかす

2019-09-28

やったこと

OpenCVの cv2.GaussianBlur を使い、画像をぼかします。

確認環境

Google Colaboratory で試しました。

import cv2
print(cv2.__version__)
3.4.3

調査

import matplotlib.pyplot as plt
import cv2

img_bgr = cv2.imread('hogehoge.jpg')
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)

result_img = cv2.GaussianBlur(img_rgb, (15, 15), 0)

plt.imshow(result_img)
plt.show()

参考

google_images_download を使ってみる

2019-09-28

やったこと

google_images_download を使い、画像ダウンロードしてみます。

確認環境

Google Colaboratory で試しました。

調査

pip インストール

!pip install google_images_download

キーワードを検索

MY_KEYWORD に取得したい画像のキーワードを入れます。

!googleimagesdownload --keywords "MY_KEYWORD" -f "jpg"

オプションは下記ページで確認できます。

Input Arguments — Google Images Download documentation

参考

Google Colaboratory で Google Drive の特定ディレクトリをマウントする

2019-09-25

やったこと

Google Colaboratory で Google Drive の特定ディレクトリをマウントしてみます。

確認環境

Google Colaboratory で試しました。

調査

パッケージ取得

!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse

Google Cloud にアクセスする認証

from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()

google-drive-ocamlfuse の認証

import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}

設定ファイル書き換え

GOOGLE_DRIVE_FOLDER_ID には共有したいディレクトリのIDを入れます。

!cp -f ~/.gdfuse/default/config config
!sed -i -e "s/^root_folder=$/root_folder=GOOGLE_DRIVE_FOLDER_ID/" config
!mkdir -p drive
!google-drive-ocamlfuse -config ./config -cc drive
!ls drive

参考

Google Colaboratory で Google Drive をマウントする

2019-09-25

やったこと

Google Colaboratory で Google Drive をマウントしてみます。

確認環境

Google Colaboratory で試しました。

調査

from google.colab import drive
drive.mount('/content/drive')

これで Google Drive をマウントすることができました。

Google ドライブを確認できます。

ls drive/My\ Drive

特定のディレクトリをマウントする方法は別で調べます。

参考