duangsuse::Echo
Photo
非常容易移植到 OpenCV,只有 font, font_size, scale, spacing 和 text, image 这几个参数
我只需要把 ImageDraw 抽象一个就好了
其实移植到 Java 的
我只需要把 ImageDraw 抽象一个就好了
其实移植到 Java 的
java.awt.image.BufferedImage 和 java.awt.Graphics 也一点也不困难,甚至可以用 C++ or JNI 的,但我觉得能用是最重要的,而且本来也该可以画些非字符的东西。Forwarded from Aelita Lyoko
其实opencv对图像这个矩阵的抽象有三代
opencv 1 是C语言风格实现,用的是 IplImage 和 CvMat 这个东西,就是个指向c结构体的指针,用各种函数的时候就要把这个指针传来传去
opencv 2 开始是C++风格实现,用的是Mat这个东西,本质上是一个c++类,通常在栈上,然后数据放在堆上,和std::vector是同样的设计风格,用各种函数的时候传的就是引用了
但是在这个时候,如果需要做GPU计算,比如opencl或者cuda,那么就得用专门的cv::ocl或者cv::cuda名字空间里面的东西,还得把数据的格式在主机内存和显卡内存直接转换来转换去的
opencv 3 开始就试图统一 主机内存和显卡内存,发明了UMat这个东西,这个东西和Mat的不同之处就是,UMat底层可能对应到主机内存或者显卡内存,所以限制了部分显卡内存里面没法实现的函数和操作,用起来的手感有点像是直接用ocl空间里面的东西
opencv 4 现在在搞计算图graph这个东西,目测是想搞lazy计算那种吧?还在起步实验阶段的样子
opencv 1 是C语言风格实现,用的是 IplImage 和 CvMat 这个东西,就是个指向c结构体的指针,用各种函数的时候就要把这个指针传来传去
opencv 2 开始是C++风格实现,用的是Mat这个东西,本质上是一个c++类,通常在栈上,然后数据放在堆上,和std::vector是同样的设计风格,用各种函数的时候传的就是引用了
但是在这个时候,如果需要做GPU计算,比如opencl或者cuda,那么就得用专门的cv::ocl或者cv::cuda名字空间里面的东西,还得把数据的格式在主机内存和显卡内存直接转换来转换去的
opencv 3 开始就试图统一 主机内存和显卡内存,发明了UMat这个东西,这个东西和Mat的不同之处就是,UMat底层可能对应到主机内存或者显卡内存,所以限制了部分显卡内存里面没法实现的函数和操作,用起来的手感有点像是直接用ocl空间里面的东西
opencv 4 现在在搞计算图graph这个东西,目测是想搞lazy计算那种吧?还在起步实验阶段的样子
def solveItemColorLayout(img, item_size, scale, spacing):#Python #code #CV 这段安排布局,算
(width, height) = img.size
(w_item, h_item) = tuple(int((item_size+sp)*scale) for sp in spacing)
(m_item, n_item) = tuple(int(v) for v in [width / w_item, height / h_item])
(padLeft, padTop) = tuple(int(v*scale / 2) for v in [(width % w_item), (height % h_item)])
imgable_area = img.crop((padLeft, padTop, img.width-padLeft, img.height-padTop))
img_average = imgable_area.resize((m_item, n_item), Image.ANTIALIAS)
for i in range(0, n_item):
for j in range(0, m_item):
(y, x) = (i*h_item, j*w_item)
yield (x, y, img_average.getpixel((j, i)) )
(w, h) (m, n) (padLeft, padTop) 的才是关键代码它也依赖
Image.size, Image.getpixel, Image.crop 和 Image.resize 然后就一把:
areas = solveItemColorLayout(scaledImage, cfg.font_size, cfg.scale, cfg.spacing)提供 font_size, scale, spacing 和 image, areas, seq, font, calc_color 即可
drawTextMontage(newImage, areas, cycle(cfg.text), cfg.font, calc_draw_color)
OpenCV 的画图根本不能用 truetype 这么自由,它的字体都是内置的!
如果想要给 OpenCV 脚本画的视频打时间轴,还得靠
expandRangeStarts 这个函数来展开一堆 [start, stop, value] 才可以img = np.zeros((200,400,3),np.uint8)
b,g,r,a = 0,255,0,0
## Use cv2.FONT_HERSHEY_XXX to write English.
text = time.strftime("%Y/%m/%d %H:%M:%S %Z", time.localtime())
cv2.putText(img, text, (50,50), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (b,g,r), 1, cv2.LINE_AA)
## Use simsum.ttc to write Chinese.
fontpath = "./simsun.ttc"
font = ImageFont.truetype(fontpath, 32)
img_pil = Image.fromarray(img)
draw = ImageDraw.Draw(img_pil)
draw.text((50, 100), "国庆节/中秋节 快乐!", font = font, fill = (b, g, r, a))
img = np.array(img_pil) #Python #CV ——http://stackoverflow.com/questions/37191008/ddg#46558093
看来还是得用 numpy 互化才可以…… 根本不应该尝试用 cv2 弄这种画文字的东西嘛
Stack Overflow
Load TrueType Font to OpenCV
Can we load a custom TrueType font and use it with cv2.putText function ?
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
def zipWithNext(xs: list):
require(len(xs) % 2, lambda it: it == 0, "list not paired, rest ")
for i in range(1, len(xs), 2):
yield (xs[i-1], xs[i])
def expandRangeStarts(starts, n):
indexed = list(range(n))
def assign(start, stop, value):
nonlocal indexed
for i in range(start, stop): indexed[i] = value
sorted_starts = sorted(starts, key=lambda it: it[0])
for (a, b) in zipWithNext(sorted_starts):
assign(a[0], b[0], a[1])
(last, last_value) = sorted_starts[-1]
assign(last, n, last_value) #Python #code 🤔
OpenCV 的
VideoWriter 真是无聊,本来以为 fourcc 设计也就是个 4*len(ascii) 不能算嘈点,结果静默失败,我调用了 write 结果输出个空文件,还不能当参数传不然莫名其妙返回什么 NULL 错误Forwarded from 喜欢吃 花生
fread时发生奔溃A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0,该怎么debug
Forwarded from dnaugsuz
我感觉 Android 群懂
但在之前应该先确认是不是调用参数弄错了
mmap() 相关的人可能不多,你应该找 C++ 或者 libc 群去问但在之前应该先确认是不是调用参数弄错了
Forwarded from 梦断代码
请问有人知道 Class[].class 对应在 Kotlin 中应该怎么写吗?
我尝试了 Array<Class>::class.java 和 Array<Class<*>>::class.java 都无法编译
我尝试了 Array<Class>::class.java 和 Array<Class<*>>::class.java 都无法编译
Forwarded from Mivik Q
我用的是java.reflect.Array.newInstance(Class::class.java, 0).javaClass