opencv在jni输出中文
时间: 2023-12-23 12:07:47 浏览: 155
在 JNI 中输出中文需要注意编码的问题。一般来说,JNI 中使用的是 UTF-8 编码,而中文字符在 UTF-8 编码中占用多个字节,因此需要进行转换。
在 OpenCV 中,可以使用 cv::String 类型来表示字符串,它提供了从 UTF-8 到其他编码的转换方法。以下是一个输出中文字符的 JNI 示例代码:
```c++
JNIEXPORT jstring JNICALL Java_com_example_opencvtest_MainActivity_test(JNIEnv* env, jobject obj) {
cv::String str("你好,世界!");
std::string utf8_str = str.utf8();
const char* utf8_cstr = utf8_str.c_str();
return env->NewStringUTF(utf8_cstr);
}
```
在这个示例中,我们先创建一个 cv::String 对象表示字符串,然后使用 utf8() 方法将其转换为 UTF-8 编码的 std::string 对象。最后,将 std::string 对象转换为 const char* 类型的指针,并使用 NewStringUTF() 方法创建一个 Java 字符串对象并返回。
相关问题
OpenCV Lib
### OpenCV 库信息概述
#### 关于OpenCV库的构建选项
当配置OpenCV进行编译时,可以选择不同的设置来影响最终生成的库文件形式。例如,在CMake配置过程中有一个名为`BUILD_opencv_world`的选项[^3]。如果选择了这个选项,则会将所有模块的功能集成到单一的`opencv_world*.lib`文件之中;反之如果不选择该选项则会产生多个独立的库文件。
#### Android平台上的OpenCV应用开发准备
对于希望在Android平台上利用OpenCV开展工作的开发者来说,建立相应的开发环境是一个重要的前提条件。这通常涉及到创建一个新的Android工程,并按照官方指南下载适合版本的OpenCV SDK包并将其引入至项目当中[^2]。此外还需注意确保正确设置了NDK路径以及其他必要的依赖关系以便支持后续可能涉及到底层图像处理操作的需求。
#### 解决常见错误提示的方法
有时可能会遇到诸如“Cannot load info library for OpenCV”的报错情况。针对这类问题可以尝试通过调用`OpenCVLoader.initDebug()`方法来进行调试模式下的初始化工作以验证是否能够正常加载所需的动态链接库[^5]。另外也建议确认所使用的JNI接口定义无误并且已经包含了正确的头文件声明等内容从而避免因跨语言交互引起的一系列兼容性难题。
```java
private void initLoadOPenCv() {
boolean success = OpenCVLoader.initDebug();
if (success) {
Log.i("TAG", "OpenCv 加载成功...");
} else {
Log.e("TAG", "OpenCv 加载失败...");
}
}
```
#### 使用OpenCV显示图片的例子
下面给出了一段简单的代码片段用于展示如何借助OpenCV读取指定位置处存储的照片资源并通过窗口界面呈现出来。这里采用的是标准输入输出流配合基本图形绘制函数的方式实现功能目标[^4]:
```cpp
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, char* argv[]) {
std::string image_path;
if(argc>1){
image_path=argv[1];
}else{
image_path="/path/to/image";
}
cv::Mat img=cv::imread(image_path);
if(img.empty()){
std::cerr << "Could not open or find the image\n";
return -1;
}
cv::namedWindow("Display window",cv::WINDOW_AUTOSIZE );
cv::imshow("Display window",img);
while(true){
int c=cvWaitKey(20);
if(c>=0)
break;
}
return 0;
}
```
怎么将melodic中OpenCV3.2.0改为OpenCV2
在ROS Melodic中,如果你想将OpenCV 3.2.0改为OpenCV 2,可以按照以下步骤操作:
1. 首先卸载当前安装的OpenCV 3.2.0:
```
sudo apt-get remove ros-melodic-opencv*
```
2. 安装OpenCV 2:
```
sudo apt-get install ros-melodic-opencv2
```
3. 确认你已经安装了OpenCV 2:
```
dpkg -l | grep opencv
```
如果看到类似于以下输出,表示已经安装了OpenCV 2:
```
ii libopencv2.4-java 2.4.9.1+dfsg-1.5ubuntu1.1 amd64 Java bindings for the computer vision library
ii libopencv2.4-jni 2.4.9.1+dfsg-1.5ubuntu1.1 amd64 Java jni library for the computer vision library
ii libopencv2.4-deb0 2.4.9.1+dfsg-1.5ubuntu1.1 amd64 development files for opencv
ii libopencv2.4 2.4.9.1+dfsg-1.5ubuntu1.1 amd64 development files for opencv
```
4. 现在你已经成功将OpenCV 3.2.0改为OpenCV 2。
阅读全文