2024走行記録
20240106 からっ風街道 走行距離48.04Km 走行時間1時間26分 20240131 赤城 走行距離28.4Km 走行時間58分 20240214 箕郷梅林 走行距離46.12Km 走行時間1時間41分 20240314 箕郷梅林 走行距離42.51Km 走行時間3時間54分 20240315 榛名梅林 走行距離68.6Km 走行時間2時間12分 20240404 赤城千本桜 走行距離34.62Km 走行時間1時間19分 20240407 妙義〜大沢川 走行距離115.22Km 走行時間3時間30分 20240410 休泊川〜桐生 走行距離102Km 走行時間3時間30分 20240428 奥四万湖 走行距離112.44Km 走行時間3時間30分 20240505 宝徳寺 走行距離80.37Km 走行時間2時間17分 20240510 宝徳寺 走行距離75.7Km 走行時間2時間30分 20240517 下仁田 走行距離123.12Km 走行時間2時間55分 20240524 愛妻の丘 走行距離170.01Km 走行時間3時間 20240605 吹割の滝 走行距離117.5Km 走行時間2時間4分 20240614 ビーナスライン走行距離271Km 走行時間7時間 20240620 荒船風穴 走行距離158.93Km 走行時間3時間 20240629 水沢観音 走行距離42.38Km 走行時間1時間8分 20240704 高根展望台(榛名走行距離56.48Km 走行時間1時間25分 20240723 覚満淵 走行距離64.05Km 走行時間1時間50分 20240729 榛名神社 走行距離65.49Km 走行時間2時間 20240731 松井田往復 走行距離65.32Km 走行時間1時間50分 20240905 奥四万往復 走行距離110.28Km 走行時間2時間 20240920 草木湖 走行距離92.47Km 走行時間2時間04分 20240926 染谷りんご園 走行距離88.91Km 走行時間2時間03分 20241002 つま恋パノラマ走行距離155Km 走行時間3時間04分 20241021 貝野瀬ビューポ走行距離81.78Km 走行時間2時間 20241031 榛名湖一周 走行距離69.41Km 走行時間1時間51分 20241112 八ッ場ダム 走行距離103Km 走行時間2時間48分 20241117 桜山公園 走行距離69Km 走行時間2時間23分 20241122 高津戸峡 走行距離54.84Km 走行時間1時間38分 20241125 少林山達磨寺 走行距離42.7Km 走行時間1時間30分 20241201 赤城 走行距離31.68Km 走行時間58分 20241203 鼻高展望花の丘走行距離37.12Km 走行時間1時間22分 20241215 下里見コメリ 走行距離38.57Km 走行時間1時間 20241230 安中榛名駅 走行距離58.68Km 走行時間2時間3分
【プログラミング覚書】PythonからC言語の関数を呼び出す
sample.py
# -*- coding: utf-8 -*-
#!/usr/bin/python
import sys
import ctypes
import numpy as np
import cv2
def overlayImage(filename, overlayfile,winname='WinName'):
cv2.namedWindow(winname,cv2.WINDOW_KEEPRATIO | cv2.WINDOW_GUI_NORMAL )
cv2.setWindowProperty(winname, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
src_image = cv2.imread(filename)
overlay_image = cv2.imread(overlayfile)
src_height, src_width = src_image.shape[:2]
ol_height, ol_width = overlay_image.shape[:2]
posX = 100
posY = 100
src_image = src_image.astype(np.uint8)
overlay_image = overlay_image.astype(np.uint8)
src_image2 = src_image.ctypes.data_as(ctypes.POINTER(ctypes.c_ubyte))
overlay_image = overlay_image.ctypes.data_as(ctypes.POINTER(ctypes.c_ubyte))
PATH = './cvlib.so'
lib = ctypes.cdll.LoadLibrary(PATH)
lib.cvlib_overlay(src_image2, overlay_image, src_height, src_width,ol_height, ol_width, posX, posY)
cv2.imshow(winname,src_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
args = sys.argv
if len(args) < 3:
print('Usage:%s baseimg overimg %d' % (args[0], len(args)))
exit(0)
overlayImage(args[1], args[2],winname='WinName')
# end of main
cvlib.cpp
#include <stdio.h>
extern "C" int cvlib_overlay(unsigned char *s_img, unsigned char *o_img, int s_h, int s_w,int o_h, int o_w, int posX, int posY)
{
//printf("sw=%d sh=%d ow=%d oh=%d posx=%d posy=%d\n",s_w, s_h, o_w, o_h, posX, posY);
unsigned int count = 0; // 上書きした画素数
int bs_pos; // ベース画像の画素位置
int ol_pos; // 上書き画像の画素位置
int b; // Blue値
int g; // Green値
int r; // Reg値
int xpos; // ベース画像の上書き位置(x)
int ypos = posY; // (y)
int x, y;
for( y = 0; y < o_h; y++ ) {
xpos = posX;
for( x = 0; x < o_w; x++ ) {
bs_pos = ( ypos * s_w + xpos) * 3; // ベース画像に上書きする画素位置
ol_pos = (y * o_w + x ) * 3; // 上書き画像から画素を取り出す位置
// 画素値をBGRで取り出す
b = o_img[ol_pos+0];
g = o_img[ol_pos+1];
r = o_img[ol_pos+2];
if( ( b <= 10 ) && ( g <= 10 ) && ( r >= 245 ) ){
; // 指定値はベース画像をそのまま使用する
} else {
// その他の場合は上書き画像で上書きする
s_img[bs_pos+0] = b;
s_img[bs_pos+1] = g;
s_img[bs_pos+2] = r;
count += 1; // 上書きした画素数
}
xpos += 1;
}
ypos += 1;
}
return count;
}
SRCS := cvlib.cpp
OBJS := $(SRCS:.cpp=.o)
EXENAME := cvlib.so
CC := gcc
LDLIBS := -lm
LDFLAGS := -shared
CFLAGS := -g -Wall -fPIC
all: $(EXENAME)
.cpp.o:
$(CC) $(CFLAGS) -c $^ -o $@
$(EXENAME): $(OBJS)
$(CC) $(LDFLAGS) $^ -o $@
clean:
rm -f *.o
rm -f $(EXENAME)
install: