- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 python 中的图像上绘制一般坐标网格。我可以计算网格线的像素坐标,因此我只需要一个能够将它们绘制为图像顶部的虚线 的模块。图像以 số lượng lớn
数组的形式出现,因此我需要能够在这些格式和绘图库使用的图像格式之间进行转换(一个方向就足够了 - 我可以绘制网格和将其导出到 số lượng lớn
,或导入 số lượng lớn
数组并在其上绘制)。它还需要相当快。
这是我尝试过的:
最近支持绘制虚线,并且与 numpy 兼容:
with Drawing() as draw:
draw.stroke_antialias = False
draw.stroke_dash_array = [1,3]
draw.stroke_color = Color("gray")
draw.fill_opacity = 0
points = calc_grid_points()
draw.polyline(points)
with Image(width=width, height=height) as img:
draw(img)
return np.fromstring(img.make_blob("RGBA"),np.uint8).reshape(img.height, img.width, 4)
但是,使用此库在 2000x1000 的图像上绘制几百条虚线需要 30 秒!几乎所有时间都花在了 draw(img)
上。所以除非我在这里做错了什么,否则魔杖太慢了。
Python 图像库一般工作正常,但它似乎不支持虚线。我没有看到有人直接说出来,但是谷歌搜索只会产生 2-3 个人询问它并且没有得到任何答案。非虚线坐标网格看起来不太好,并且覆盖了大部分正在绘制的图像。 PIL 比 wand 快多。这个没有破折号但与上面的魔杖版本等效的版本只需要 0.06开始画画。这比魔杖快 450 倍!
img = PIL.Image.new("RGBA", (width, height))
draw = PIL.ImageDraw.Draw(img)
segs = calc_grid_points()
for seg in segs:
draw.line([tuple(i) for i in seg], fill=(0,0,0,32))
return np.array(img)
gd
支持虚线,但我没有找到将其图像与 số lượng lớn
数组相互转换的有效方法。
Matplotlib 对绘制坐标网格和坐标轴有适当的支持,但遗憾的是似乎无法避免重新像素化。它坚持构建其新的像素集,这些像素从不与原始像素进行一对一映射。这对于平滑的图像来说很好,但对于像素与像素之间变化很大的图像来说就不行了。
这是一个 matplotlib 再像素化的例子:
nhập numpy dưới dạng np
import matplotlib
matplotlib.use("Agg")
nhập matplotlib.pyplot dưới dạng plt
n = 1001
data = np.arange(n*n).reshape(n,n)%2
plt.imshow(data)
plt.savefig("test.png")
这张图片包含一个棋盘图案,每个像素在 0 和 1 之间切换。但据我所知,没有办法确保一个像素的数据将恰好对应于输出中的一个像素。如果没有,您会得到莫尔图案,就像这段代码产生的那样:
手动调整 dpi
设置可以减少这个问题,但不能消除它。正确的输出会使绘图的数据部分恰好占据 1001 x 1001 像素(因此整个图像会比这大),并在每个方向上重复显示 500 次图案。
编辑:添加 interpolation='none'
没有帮助。这只会导致 matplotlib 使用最近的邻居。它仍然没有显示所有数据。输出结果如下:
这是正确的输出结果(我将其裁剪为 500x500,完整版为 1001x1001):
但 matplotlib 并不是我真正的问题 - 它只是用 python 在图像上绘制虚线。 Matplotlib 只是一种可行的方法。
所以我想知道,还有其他图像库可以实现这一目标吗?还是我忽略了上述使它们可用的功能?
1 Câu trả lời
使用 matplotlib,在删除帧和刻度线后,使用 dpi 似乎可以得到不错的结果。
但是有一点是边界框计算遇到了舍入错误,因此我们需要手动修复边界框大小:
nhập numpy dưới dạng np
import matplotlib
nhập matplotlib.pyplot dưới dạng plt
# Some fake data
n = 1001
data = np.arange(n*n).reshape(n,n)%2
data = data[:n//2,:]
def get_bitmap_frame(data, dpi=None):
"""
Construct a figure for overlaying elements on top of bitmap data.
Returns
-------
fig, ax
Matplotlib figure and axis objects
"""
if dpi is None:
dpi = matplotlib.rcParams['savefig.dpi']
dpi = float(dpi)
fig = plt.figure(figsize=(data.shape[1]/dpi, data.shape[0]/dpi), dpi=dpi)
ax = fig.add_axes([0, 0, 1, 1], frame_on=False)
ax.xaxis.set_visible(False)
ax.yaxis.set_visible(False)
ax.imshow(data, interpolation='none')
# Note: it can happen that floating point rounding error in
# bbox calculation results to the bbox size being off by one
# pixel. Because of this, we set it manually
fig.bbox = matplotlib.transforms.Bbox.from_bounds(0, 0, data.shape[1], data.shape[0])
return fig, ax
fig, ax = get_bitmap_frame(data)
# Annotate
ax.text(100, 100, 'Hello!', color='w')
fig.savefig("test.png")
关于python - 兼容 Numpy 的图像绘图库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28647383/
Tôi có một tiện ích bổ sung mà tôi viết cho Firefox 3.6 và hiện tôi đang nâng cấp nó lên Firefox 4.0 trong khi cố gắng làm cho nó tương thích với 3.6. Có ai có kinh nghiệm thực hiện việc này không, hoặc có ý tưởng nào về cách sửa lỗi trong trường hợp mã trở nên quá giống mì spaghetti không?
Tôi đã cài đặt Cassandra 2.0.1 và muốn sử dụng Astyanax Java API trong ứng dụng của mình. Tôi thấy bảng tương thích Cassandra trên wiki và thấy Astyanax sử dụng Netflix.
Có thể tạo một lớp chứa tùy chỉnh được triển khai hoàn toàn bằng VBScript (không có đối tượng COM) hoạt động với câu lệnh For Each không? Nếu vậy, tôi phải công khai bằng cách nào? Câu trả lời hay nhất là ngắn gọn, tại sao? Tạo một lớp bộ sưu tập có thể đếm được
Tôi có một vài mã ở đây int b=3; b=b >> 1; System.out.println(b); nó hoạt động tốt nhưng khi tôi thay đổi biến b thành byte, short, float, double thì nó chứa
Chúng tôi có một máy khách Java có thể gọi nhiều hệ thống của bên thứ ba bằng cách sử dụng corba. Đây là những hệ thống khác nhau triển khai cùng một bộ giao diện. Chúng ta có được thư viện (tệp jar) sử dụng các giao diện này. Ví dụ, những điều này
Tôi biết rằng về mặt kỹ thuật HTML5 là một "thông số kỹ thuật sống", nhưng tôi muốn biết liệu nó có tuân thủ quy tắc về việc thêm khoảng trắng theo sau tên lớp hay không. Tôi không thấy tài liệu hướng dẫn nào đề cập đến tình huống này, nhưng một trong những đồng đội của tôi nói rằng nó không hợp lệ. Có lẽ tôi đã bỏ lỡ điều gì đó? Việc cắt tỉa những khoảng trống này sẽ
Tôi lập trình bằng C trên Linux x86-64. Tôi đang làm việc với một thư viện tạo nhiều luồng thông qua lệnh gọi hệ thống sao chép thô thay vì sử dụng pthread_create. Các luồng này chạy mã cấp thấp bên trong thư viện. Tôi muốn móc cái này
Tôi đang tìm cách viết một chương trình có thể khởi động bằng trình biên dịch để có thể gửi và nhận các gói tin mạng. Tôi không muốn sử dụng bất kỳ thư viện nào, tôi muốn tự mình tạo ra nó (và học trong khi thực hiện). Thật không may là tôi không thể tìm thấy bất kỳ thông tin nào về mức giao tiếp thấp nhất của card mạng (gửi các socket thô). Tôi tin là có
Có nhánh CoffeeScript nào không có thay đổi nào ngoại trừ phạm vi cố định để tương thích phần lớn với CoffeeScript (hoàn toàn tương thích nếu mã không có phép gán biến bên ngoài) không? Tôi sẽ xem xét sử dụng chấp nhận được
Câu hỏi này đã có câu trả lời: Tại sao BiConsumer được phép được gán một hàm chỉ chấp nhận một tham số duy nhất
Ứng dụng Java của tôi yêu cầu một cơ sở dữ liệu bộ nhớ chính hiệu suất cao 1] Vui lòng đề xuất một cơ sở dữ liệu - Tương thích với JDBC - Độc lập (tức là tệp phẳng) - Hỗ trợ các bảng trong bộ nhớ - Hiệu suất cao - Chỉ mục B-TREE 2] Có công nghệ nào trong JAVA có thể
Tôi thường tìm thấy một số hàm lấy char* làm tham số, nhưng tôi nghe nói std::string được khuyên dùng hơn trong C++. Làm thế nào để sử dụng các đối tượng std::string với các hàm lấy char* làm tham số? Cho đến nay tôi đã học được rằng c_str
Tôi đang chuyển một trong những tệp javascript cũ của mình để tương thích với requireJS. Mã trông như thế này trước đây. // effect.js (hàm (xuất khẩu) { // viết tắt
Tôi đã có mã hoạt động trước khi cập nhật SDK hôm nay (để tham khảo trong tương lai, vui lòng xem ngày hỏi). .getMap từng đưa ra cảnh báo cho biết nó đã lỗi thời, nhưng bây giờ nó thậm chí còn không được công nhận là đầu vào hợp lệ. Tôi cho rằng điều này là do API 24 (Android
Theo bảng tham khảo trên hyperpolyglot.org, cú pháp sau có thể được sử dụng để thiết lập một mảng. i=(1 2 3) Nhưng tôi gặp lỗi trên dash, đó là Ubuntu
Tôi đã cài đặt MYSQL 8.0.12 (phiên bản tải xuống) trên MacBook của mình. Khi tôi thử dump phiên bản tương thích của mysql40, tôi nhận được lỗi Invalid mode to --known: mysql40. Tôi 100 tuổi
Xin chào, tôi đang trong quá trình thay đổi hệ thống kiểm soát phiên bản của mình và tôi đang tìm hiểu xem liệu Perforce có tương thích với BCM Remediation không. Có ai biết hệ thống kiểm soát phiên bản nào khác tương thích với bcm remedy không? ? Câu trả lời tốt nhất là BMC Remedy sẽ gần với Clea hơn
Tôi cần vẽ lưới tọa độ chung trên một hình ảnh bằng Python. Tôi có thể tính toán tọa độ điểm ảnh của các đường lưới, vì vậy tôi chỉ cần một mô-đun có thể vẽ chúng thành các đường chấm trên đầu hình ảnh. Các hình ảnh có dạng mảng numpy, vì vậy tôi cần có khả năng làm việc giữa các định dạng này và vẽ sơ đồ
Cách "truyền thống" để thư viện chấp nhận đầu vào tệp là thực hiện như sau: def foo(file_obj): data = file_obj.read() # Thực hiện những việc khác ở đây Mã máy khách
Tài liệu CodeUntitled #topDropDownMenu { vị trí: tương đối;
Tôi là một lập trình viên xuất sắc, rất giỏi!